题目:
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
/*
1、刚开始懵在了 输入字符串 string
注意这里的输入形式是 vector<string> ,而不是 string
因此 每个逗号隔开的都是一个字符串咯
2、有点机智的处理
把比较多个字符串的最小频率,转换成比较第一个和其他
然后再其他的处理上加了一些技巧,每次需要更新 min 频次
更新这里还是写错了,真的挺不应该的昂,小傻瓜~
3、如何定义一个 数组
int arr[26] = {0}; // 初始化一个大小为26,初值为0的数组
4、最后的处理遇到了两个问题:
1、要用内层需要while循环,因为可能有重复字符
2、char——>string
这里的处理在定义的时候:定义一个大小为1,值为 i+'a' 的字符串 string s(1, i + 'a')
*/
class Solution {
public:
vector<string> commonChars(vector<string>& words)
{
vector<string> res;
int word[26] = {0};
for (char it : words[0]) word[it - 'a']++;
for (int i = 1; i < words.size(); ++i)
{
int temp[26] = {0};
for (char it : words[i]) temp[it - 'a']++;
for (int j = 0; j < 26; ++j)
{
// 还是没有想到,这里比较是跟第一个字符串进行比,取最小值,更新到 word 中
word[j] = min(temp[j], word[j]);
}
}
// 这里的处理,遇到了两个问题:1、要用内层需要while循环,因为可能有重复字符 2、char——>string
for (int i = 0; i < 26; ++i)
{
// 定义一个大小为1,值为 i+'a'
string s(1, i + 'a'); // 这里是 下标i + a ,刚刚错写成了 word[i],这个对应的出现的最低频率,小傻瓜
while (word[i] != 0)
{
res.push_back(s);
word[i]--;
}
}
return res;
}
};