1、这题一开始我把所有字母一起map导致忽略了有些单词有多个有些没有。。
这是一道简单的题26个字母记录,在每个单词中出现的最小次数,最后放到容器里面输出
知识点1:char转化为string
string(const char *s); //用c字符串s初始化
string(int n,char c); //用n个字符c初始化
string s(1, i + 'a'); // char -> string

class Solution {
public:
vector<string> commonChars(vector<string>& A) {
vector<string> result;
if (A.size() == 0) return result;
int hash[26] = {0}; // 用来统计所有字符串里字符出现的最小频率
for (int i = 0; i < A[0].size(); i++) { // 用第一个字符串给hash初始化
hash[A[0][i] - 'a']++;
}
// int hashOtherStr[26] = {0}; // 统计除第一个字符串外字符的出现频率
for (int i = 1; i < A.size(); i++) {
// memset(hashOtherStr, 0, 26 * sizeof(int));
int hashOtherStr[26] = {0};
for (int j = 0; j < A[i].size(); j++) {
hashOtherStr[A[i][j] - 'a']++;
}
// 更新hash,保证hash里统计26个字符在所有字符串里出现的最小次数
for (int k = 0; k < 26; k++) {
hash[k] = min(hash[k], hashOtherStr[k]);
}
}
// 将hash统计的字符次数,转成输出形式
for (int i = 0; i < 26; i++) {
while (hash[i] != 0) { // 注意这里是while,多个重复的字符
char c = i + 'a'
string s(i + 'a'); // char -> string
// string s;
// s += i + 'a';
result.push_back(s);
hash[i]--;
}
}
return result;
}
};
该博客介绍了如何使用C++解决一个字符串处理问题,即找出一组字符串中共有的最小子串。通过遍历每个字符串并维护一个字符出现频率的哈希表,博主展示了如何找到所有字符串中每个字母的最小出现次数,并将其转换为输出的子串。内容涉及到字符到字符串的转化、哈希表操作和循环处理。
499

被折叠的 条评论
为什么被折叠?



