(哈希表) 1002. 查找共用字符 ——【Leetcode每日一题】

news/2024/9/16 5:06:35/

❓1002. 查找共用字符

难度:简单

给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。

示例 1:

输入:words = [“bella”,“label”,“roller”]
输出:[“e”,“l”,“l”]

示例 2:

输入:words = [“cool”,“lock”,“cook”]
输出:[“c”,“o”]

提示

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i]小写英文字母组成

💡思路:哈希表计数

小写英文字母“,“出现频率”, 这些关键字都是为 哈希法 量身定做的!!!

  1. 使用数组统计出搜索每个字符串里26个字符的出现的频率;
  2. 然后取每个字符频率最小值;
    • 刚开始用以一个字符串对 hash 数组进行初始化,
    • 两两比较,取最小值;
  3. 最后转成输出格式。

🍁代码:(Java、C++)

Java

class Solution {public List<String> commonChars(String[] words) {List<String> ans = new ArrayList<>();int[] hash = new int[26];for(char c : words[0].toCharArray()){//用第一个字符串给hash数组初始化hash[c - 'a']++;}int[] hashOther = new int[26];for(int i = 1; i < words.length; i++){Arrays.fill(hashOther, 0);//重置为0for(char c : words[i].toCharArray()){//统计剩余字符串中每个字符数量hashOther[c - 'a']++;}//对比26个字符,取最小值for(int j = 0; j < 26; j++){hash[j] = Math.min(hash[j], hashOther[j]);}}for(int i = 0; i < 26; i++){//将字符转换为String型while(hash[i] > 0) {ans.add(String.valueOf((char)('a' + i)));hash[i]--;}}return ans;}
}

C++

class Solution {
public:vector<string> commonChars(vector<string>& words) {vector<string> ans;int hash[26] = {0};for(char c : words[0]){//用第一个字符串给hash数组初始化hash[c - 'a']++;}int hashOther[26] = {0};for(int i = 1; i < words.size(); i++){memset(hashOther, 0, 26 * sizeof(int));//重置为0for(char c : words[i]){//统计剩余字符串中每个字符数量hashOther[c - 'a']++;}//对比26个字符,取最小值for(int j = 0; j < 26; j++){hash[j] = min(hash[j], hashOther[j]);}}for(int i = 0; i < 26; i++){//将字符转换为string型while(hash[i]--) {ans.push_back(string(1, i + 'a'));}}return ans;}
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ( m + ∣ Σ ∣ ) ) O(n(m+∣Σ∣)) O(n(m+Σ)),其中 n 是数组 words 的长度(即字符串的数目),m 是字符串的平均长度, Σ \Sigma Σ 为字符集,在本题中字符集为所有小写字母, ∣ Σ ∣ = 26 |\Sigma|=26 ∣Σ∣=26

  • 空间复杂度 O ( ∣ Σ ∣ ) O(∣\Sigma∣) O(Σ),这里只计算存储答案之外的空间。我们使用了数组 hashhashOther,它们的长度均为 ∣ Σ ∣ |\Sigma| ∣Σ∣ ,这里为 26。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


http://www.ppmy.cn/news/382648.html

相关文章

一个工科男眼中的经济学核心问题

1一切的出发点是『效用』和『代价』&#xff0c;人与草履虫一样&#xff0c;具有趋利避害的属性。 这个事物有没有用&#xff1f;对谁有用&#xff1f;能用到这个事物的那个人能不能承受的了其中的负面『代价』&#xff1f; 2效用、代价都具有『相对性』 也就是说&#xff0c…

Linux防火墙学习笔记14

firewalld是什么&#xff1f; Firewalld属于动态防火墙&#xff0c;是CentOS7系统中用于对netfilter内核模块用户空间管理工具。 Firewalld仅仅代替了iptables service部分&#xff0c;其底层还是使用iptables作为防火墙规则管理工具。 Firewalld中zone概念及作用&#xff1…

AI Expo 2023 | 图技术激活数据资产主题论坛线下报名限时开放!

洞察关联数据 创造无限可能 图技术激活数据资产主题论坛 将于2023年6月25日在苏州召开。 大会背景 本次图技术激活数据资产论坛&#xff0c;由苏州市大数据服务中心协会主办、浙江创邻科技有限公司承办&#xff0c;苏州市计算机学会、苏州市大数据和人工智能产业联盟协办&…

Matlab与ROS---深度学习(九)

0. 简介 在了解完上面8讲内容后&#xff0c;基本上ROS和Matlab最关键的部分已经介绍完毕。我们最后一讲就来简单的讲述一下如何在Matlab中结合ROS来完成障碍物的识别与检测。 1. 在Matlab中使用CUDA 配置SimulinkCoder以从Simulink模型生成和构建的CUDA的ROS节点是我们这一小…

排序大全

一、插入排序(Insertion Sort) 1. 基本思想&#xff1a; 每次将一个待排序的数据元素&#xff0c;插入到前面已经排好序的数列中的适当位置&#xff0c;使数列依然有序&#xff1b;直到待排序数据元素全部插入完为止。 2. 排序过程&#xff1a;  【示例】&#xff…

计算机符号mi,在线特殊符号大全

东亚风格可爱符号表情 东亚许多地区在电脑上书写文字常用全角字&#xff0c;利用全角字也能够创作出许多不同类型的表情符号。 &#xff1c;(&#xff0d;︿&#xff0d;)&#xff1e;      生气我很生气喔&#xff01;&#xff01;别吵我&#xff0c;知道吗 &#xff1c…

python-大全

文章目录 ⼀、认识 Python⼆、Python 命令1、变量、赋值、对象1.1动态类型 type&#xff08;变量名&#xff09;1.2增量赋值增量赋值&#xff1a;1.3Python 的对象&#xff1a;三要素&#xff08;ID&#xff0c;类型&#xff0c;值&#xff09; 2、Python 的输⼊与输出2.1Pytho…

生僻字大全

生僻字大全 厶部&#xff1a; 厷厸厹厺厼厽厾叀叁参叄叅叆叇亝 又部&#xff1a; 収叏叐叒叓叕叚叜叝叞叠 口部&#xff1a; 叧叨叭叱叴叵叺叻叼叽叾卟叿吀吁吂吅吆吇吋吒吔吖吘吙吚吜吡吢吣吤吥吧吩吪吭吮吰吱吲呐吷吺吽呁呃呄呅呇呉呋呋呌呍呎呏呐呒呓呔呕呗呙呚呛呜呝呞…

行业大全职业大全

通常很多人会混淆行业和职业&#xff0c;实际上它们是有很大区别的。 行业是按工作对象来划分&#xff0c;比如计算机行业&#xff0c;保险行业&#xff0c;农牧业......   职业是按工作职能来划分&#xff0c;比如企业家&#xff0c;科学家&#xff0c;老师&#xff0c;军人…

mysql大全

create database school; 创建名字为school的数据库 show databases; 查看有哪些数据库 use school; 切换到school库里 create table student( 建表 -> id int primary key auto_increment, primary key 是主键&#xff0c;aut…

大全

1.jsp背景图片全屏显示 <body style"filter:progid:dximagetransform.microsoft.alphaimageloader(srcimages/1307051114c09a9de422c5f01f.jpg,sizingmethodscale)"> 2.使用js弹出一个窗口&#xff0c;并居中显示 function queryDate(){ …

shell大全

第一章 本节课程目标 语法和选项语法和选项 \3. sort工具 语法和选项 5.tee工具6.diff工具 语法和选项 7. paste工具\8. tr工具 语法和选项 小试牛刀 二、bash的特性 了解shell中的通配符 熟悉grep、cut、sort等小工具和shell中的通配符的使用 #一、文本处理工具 1. g…

网址大全-

微软最新dll修复运行库 Latest supported Visual C Redistributable downloads | Microsoft Docs 程序员导航程序员导航-CXY521龙轩导航龙轩导航-做个有用的导航程序员工具箱http://www.idevtool.com/ZDZN-专业开发者导航ZDZN-专业开发者导航程序员网址导航 | 程序员必备实用网…

Echarts大全

全网echarts案例资源大总结和echarts的高效使用技巧&#xff08;细节版&#xff09; 一.前言。 众所周知&#xff0c;在现今的开发大环境下&#xff0c;数据可视化&#xff08;大屏化&#xff09;项目在前端开发中的比重越来越大。而其中使用率最高的插件无疑就是 Apache Ech…

常用网站大全

一、code专用 1. maven仓库 https://mvnrepository.com2. Spring索引 file:///D:/APP-MyJars/Spring/spring-framework-5.2.9.RELEASE/s/spring-framework-reference/index.html3. Banner启动样式 https://www.bootschool.net/ascii4. Spring官网 https://spring.io5. 微信…

运算符大全

运算符主要分为六大类&#xff1a; 一&#xff0c;算数运算符 (加) -(减) *(乘) /(除) %(取余) (自增) --(自减) 注意&#xff1a;a和a不同&#xff0c;前者是先赋值后自增&#xff0c;后者反之,自减同理 例&#xff1a; int a1; int ba; int ca; Console.WriteL…

Linux常用命令大全-大全-大全

如果对您有所帮助,点个赞吧…谢谢 飞机票 systemd查看系统信息关机 (系统的关机、重启以及登出 )文件和目录文件搜索挂载一个文件系统磁盘空间用户和群组文件的权限 - 使用 "" 设置权限&#xff0c;使用 "-" 用于取消文件的特殊属性 - 使用 "" 设…

常见符号集汇总

热门符号 ღ•⁂€™↑→↓⇝√∞░▲▶◀●☀☁☂☃☄★☆☉☐☑☎☚☛☜☝☞☟☠☢☣☪☮☯☸☹☺☻☼☽☾♔♕♖♗♘♚♛♜♝♞♟♡♨♩♪♫♬✈✉✍✎✓✔✘✚✞✟✠✡✦✧✩✪✮✯✹✿❀❁❂❄❅❆❝❞❣❤❥❦➤ 特殊符号 国际象棋符号 ♔♕♖♗♘♙♚♛♜♝♞♟ 音符…

HTTP状态码大全

HTTP状态码大全 写在前面404500502301 307200 写在前面 我们在开发Web服务的时候&#xff0c;经常会遇到404&#xff0c;500等错误。对于初学者来说遇到错误&#xff0c;不知如何下手&#xff0c;今天我们来看看每个状态都表示什么意思&#xff1f; HTTP状态码&#xff08;HT…

常用类大全!!!

常用类 1.Object类 概述&#xff1a; 1.类层次的根类 2.所有类都直接或间接的继承该类 构造方法&#xff1a; 1.public Objetc(); 2.所有子类都默认访问父类的无参构造方法 Object类的成员方法 public int hashCode() &#xff1a;获得该对象的哈希值 public final C…