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,