zoukankan      html  css  js  c++  java
  • 1002. 查找常用字符

    查找常用字符


    题目

    给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。

    你可以按任意顺序返回答案。

    示例 1:
    输入:["bella","label","roller"]
    输出:["e","l","l"]
    
    示例 2:
    输入:["cool","lock","cook"]
    输出:["c","o"]
    

    提示:

    1 <= A.length <= 100
    1 <= A[i].length <= 100
    A[i][j] 是小写字母

    思路

    具体来看这道题目是一道简单题,可以通过计数来求解
    但是在这里使用哈希法来解决,具体思路如下:
    统计出搜索字符串里26个字符的出现的频率,
    然后取每个字符频率最小值,最后转成输出格式就可以了

    代码

    class Solution {
    public:
        vector<string> commonChars(vector<string>& A) {
            int reschar[26] = {0};
            //把字符串数组中第一个元素赋予reschar
            for(int i = 0;i<A[0].size();i++)
            {
                reschar[A[0][i]-'a']++;
            }
            int nextchar[26] = {0};
            for(vector<string>::iterator it = A.begin() + 1; it<A.end();it ++)
            {
                // 对nextchar 数组元素清0
                memset(nextchar,0,26*sizeof(int));
                for(int k = 0;k<(*it).size();k++)
                {
                    nextchar[(*it)[k] - 'a']++;
                }
    
                for(int i = 0;i<26 ;i++)
                {
                    reschar[i] = min(reschar[i],nextchar[i]);
                }
            }
            vector<string> res;
            //这个时候得到的reschar分别存储着在每一个字符串中都出现的字符的次数
            for(int i =0;i<26;i++)
            {
                while(reschar[i]!=0)
                {
                    string s(1,'a' + i); //string 构造函数,生成1个 'a'+i 字符的字符串
                    res.push_back(s);
                    reschar[i]--;
                }
            }
            return res; 
        }
    };
    

    分析算法复杂度

    设字符串数组的长度为(N),平均字符串长度为(M),算法复杂度应该在(O(N(M+26))), 空间复杂度为(O(26))

    收获与复习

    • C++ 的iterator迭代器的用法
    • string 构造方法 string s(int,char) 表示string 构造函数,生成1个 'a'+i 字符的字符串

    链接

    链接:https://leetcode-cn.com/problems/find-common-characters
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    20201304杨淑钰+快速浏览教材
    20201304 自我介绍
    熟悉编程语言
    俄罗斯方块游戏代码的改写
    2020 -2021-1 20201319 《信息安全专业导论》第八周学习总结
    如何学好编程
    2020-2021-1 20201319 《信息安全专业导论》第七周学习总结
    2020-2021-1 20201319 《信息安全专业导论》第六周学习总结
    实现进制转换伪代码
    斐波那契数列递归实现
  • 原文地址:https://www.cnblogs.com/jiashun/p/LeetCode_1002.html
Copyright © 2011-2022 走看看