1、题目
给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
示例 1:
输入:words = ["bella","label","roller"] 输出:["e","l","l"] 示例 2:
输入:words = ["cool","lock","cook"] 输出:["c","o"]
提示:
1 <= words.length <= 100 1 <= words[i].length <= 100 words[i] 由小写英文字母组成
2、题解
通过阅读本题我们可以通过hash表来记录每个字符的个数。每次遍历完一个单词,与之前出现的单词字符数作比较,取最小的。
接着,循环遍历所有字符串,得到最少的重叠单词字符数量:若最小值为0则输出空,若最小值为1则输出该字母一次,若最小值为2则输出该字母两次,以此类推(本题不需要考虑字符顺序问题)。
3、代码
``
class Solution { public: vector<string> commonChars(vector<string>& words) { vector<string> arr; int a[101][26]={0}; for(int i=0;i<words.size();i++){ for(int j=0;j<words[i].size();j++){ a[i][words[i][j]-'a']++; } } for(int j=0;j<26;j++){ for(int i=1;i<words.size();i++) a[0][j]=min(a[0][j],a[i][j]);//更新出现次数的最小值 } for(int j=0;j<26;j++){ while(a[0][j]--){ char c=(char)('a'+j);// char -> string string s=""; s=s+c; arr.push_back(s); } } return arr; } };