题目链接:1002. 查找常用字符
2020.10.14第一次解答:
解题思路
有点要用哈希表的意思,但是想了想用数组就可以满足题意要求了
个人最开始的想法是,为每一个字符串都开辟一个记录数组,记录其每个字母出现的次数,最后各取最小值
但是又觉得这样做的话空间好浪费哦,还要再找出最小值,又要浪费时间
于是想到优化方案,只需要两个数组。一个 cur[26] 记录当前字符串每个字母出现次数,一个 backup[26] 记录历史每个字母出现的最小次数。最后根据 backup 将字母写回 ans 容器即可。
C++代码
class Solution {
public:
vector<string> commonChars(vector<string>& A) {
vector<string> ans;
if (A.size() == 0) return ans;
int backup[26]; //记录历史数据
for (int i = 0; i < 26; i++) backup[i] = INT_MAX;
for (int i = 0; i < A.size(); i++) {
int cur[26] = {0}; //记录当前字符串
for (int j = 0; j < A[i].length(); j++) {
cur[A[i][j] - 'a']++;
}
for (int j = 0; j < 26; j++) {
backup[j] = min(backup[j], cur[j]);
}
}
for (int i = 0; i < 26; i++) {
for (int j = 0; j < backup[i]; j++) {
string s(1, i + 'a');
ans.emplace_back(s);
}
}
return ans;
}
};
Java代码稍后贴上