力扣-1002-查找共用字符

134 阅读1分钟

1002. 查找共用字符

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

示例 1:

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

示例 2:

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

思路:

1、记录该字符串内各个字符的出现次数

2、与上一字符串内的字符比较,若该字符出现次数较上一字符串减少,更新次数(更新是为了记录上个字符串内的重复字符与该字符串重复的个数,以保证对所有重复字符的记录)

3、若不是最后一个字符串,继续执行1

4、按最后记录的对应的次数依次输出重复字符

class Solution {
public:  
    vector<string> commonChars(vector<string>& words) {
        vector<string> ans;
        vector<int> a(26,110);
        for(int i=0;i<words.size();i++){
            int cnt[26];
            memset(cnt,0,sizeof(cnt));
            for(int j=0;j<words[i].size();j++){
                cnt[words[i][j]-'a']++;
            }
            for(int j=0;j<26;j++){
                a[j]=min(a[j],cnt[j]);
            }
        }
        for(int i=0;i<26;i++){
           for(int j=0;j<a[i];j++){
                ans.push_back(string(1,i+'a'));
            }
        }
        return ans;
    }
};

注意: memset操作: 详见使用memset对数组赋值_bulebin的博客-CSDN博客_memset 数组

memset函数对内存块赋值是以字节为单位来赋值,而实例代码是为4字节为一个单位,若直接赋非零值,会对每个字节都是该值。

而赋值0无影响是因为即使对每个字节否都赋值,其结果均为0,