力扣(LeetCode)查找常用字符 个人题解
给定仅有小写字母组成的字符串数组 A
,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
示例 1:
输入:["bella","label","roller"] 输出:["e","l","l"]
示例 2:
输入:["cool","lock","cook"] 输出:["c","o"]
提示:
1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j]
是小写字母
这题拿到手,一开始的思路错了,没有考虑多次出现的字符只重复部分次数的情况。后面参考了评论区,找到了正确的思路。
同样是记录第一个字符串出现字符的次数作为基准,然后依次比较剩下的字符串中字符的出现次数。取字符串中字符出现次数的最小值作为基准进行下一步判断。
最后输出基准内的字母,完成题目。代码如下:
class Solution { public: vector<string> commonChars(vector<string>& A) { vector<string> result; int p[26]; fill(p,p+26,0); //记录第一个字符串内的出现次数 for(char c: A[0]){ p[c-'a']++; } for(int i=1; i<A.size(); i++){ int tmp[26]; fill(tmp,tmp+26,0); for(char c: A[i]){ tmp[c-'a']++; } for(int j=0; j<26; j++){ if(p[j]>tmp[j]) p[j] = tmp[j]; } } for(int i=0; i<26; i++){ if(p[i]>0){ for(int j=0; j<p[i]; j++){ string tmp = ""; tmp += char('a'+i); result.push_back(tmp); } } } return result; } };