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

这篇具有很好参考价值的文章主要介绍了(哈希表) 1002. 查找共用字符 ——【Leetcode每日一题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

❓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);//重置为0
            for(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));//重置为0
            for(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;
    }
};
🚀 运行结果:

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

🕔 复杂度分析:
  • 时间复杂度 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—力扣专栏,每日更新!文章来源地址https://www.toymoban.com/news/detail-482974.html

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

到了这里,关于(哈希表) 1002. 查找共用字符 ——【Leetcode每日一题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode·每日一题·822. 翻转卡片游戏·哈希

    作者:小迅 链接:https://leetcode.cn/problems/card-flipping-game/solutions/2368969/ha-xi-zhu-shi-chao-ji-xiang-xi-by-xun-ge-7ivj/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 根据题意,只要有数字满足 fronts[i]=backs[i],那么 fronts[i] 绝对不可能是

    2024年02月14日
    浏览(26)
  • 每日一题(LeetCode)----二分查找(一)

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 104 -104 = nums[i] = 104 nums 为 无重复元素 的 升序 排列数

    2024年02月08日
    浏览(41)
  • 【LeetCode】每日一题&&两数之和&&寻找正序数组的中位数&&找出字符串中第一个匹配项的下标&&在排序数组中查找元素的第一个和最后一个位置

    ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月08日
    浏览(42)
  • 【Leetcode每日一题】35.搜素插入位置|二分查找数组下标

    🌱博主简介:大一计科生,努力学习Java中!热爱写博客~预备程序媛 📜所属专栏:LeetCode每日一题–进击大厂 ✈往期博文回顾: 【JavaSE】保姆级教程|1万字+10张图学会类与对象–建议收藏 🕵️‍♂️近期目标:成为千粉小博主。 🌺“再牛的程序员也是从小白开始,既然开始

    2024年02月21日
    浏览(33)
  • ( 字符串) 205. 同构字符串 ——【Leetcode每日一题】

    难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个

    2024年02月02日
    浏览(37)
  • LeetCode·每日一题·415. 字符串相加·模拟

    作者:小迅 链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   题意 - 给定二个字符串,计算它们的和并同样以字符串形式返回。 直接从

    2024年02月16日
    浏览(30)
  • 【力扣·每日一题】2085.统计出现过一次的公共字符串(模拟 哈希表 优化 C++ Go)

    题目链接 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 输入:words1 = [“leetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“leetcode”,“is”] 输出:2 解释: “leetcode” 在两个数组中都恰好出现一次,计入答

    2024年01月21日
    浏览(38)
  • ( 字符串) 647. 回文子串 ——【Leetcode每日一题】

    难度:中等 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串

    2024年02月01日
    浏览(31)
  • (贪心) 1221. 分割平衡字符串 ——【Leetcode每日一题】

    难度:简单 平衡字符串 中, \\\'L\\\' 和 \\\'R\\\' 字符的数量是相同的。 给你一个平衡字符串 s ,请你将它分割成尽可能多的子字符串,并满足: 每个子字符串都是平衡字符串。 返回可以通过分割得到的平衡字符串的 最大数量 。 示例 1: 输入:s = “RLRRLLRLRL” 输出:4 解释:s 可以分

    2024年02月11日
    浏览(25)
  • (字符串) 925. 长按键入 ——【Leetcode每日一题】

    难度:简单 你的朋友正在使用键盘输入他的名字 name 。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed 。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True 。 示例 1: 输入:na

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包