思路
统计每一个字符串中字母出现的频率,将其最小值记为最终答案的次数。
代码
class Solution {
public:
vector<string> commonChars(vector<string>& words) {
// 储存每个字符串中相同字母出现的频率的最小值
int minFrequency[26] = {0};
// 先把第一个字符串的频率记录下来
for (int i = 0; i < words[0].length(); i++)
minFrequency[words[0][i] - 'a']++;
// 遍历后面的每个字符串
int nowFrequency[26] = {0};
for (int i = 1; i < words.size(); i++) {
// 当前字符串的各个字母的频率
for (int j = 0; j < words[i].length(); j++)
nowFrequency[words[i][j] - 'a']++;
// 将较小的那个保存到minFrequency,并将当前频率清零
for (int k = 0; k < 26; k++) {
minFrequency[k] = min(minFrequency[k], nowFrequency[k]);
nowFrequency[k] = 0;
}
}
// 以数组的形式返回结果
vector<string> result;
for (int i = 0; i < 26; i++) {
while (minFrequency[i]-- > 0) {
// 由于题目要求返回数组的类型是string,因此要转化一下
string s(1, 'a' + i);
result.push_back(s);
}
}
return result;
}
};