题目
给你一个字符串数组 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]
由小写英文字母组成
题解
题目说words[i]只由小写英文字母组成,这种条件适合用数组来表示哈希表。每一个字符串用一个record[26]来记录,0~25表示a~z。record初始化为0,按照字符串中字母计数。然后全部放入后,纵向比较,若纵向出现0则直接continue,若都不为0则选出最小值,然后放入vector中。全部遍历完后返回vector。
时间复杂度:O(n)
空间复杂度:O(n)
vector<string> commonChars(vector<string>& words) {
int records[words.size()][26];
for(int i=0;i<words.size();i++){
for(int j=0;j<26;j++){
records[i][j]=0;
}
}
int i=0;
for(string s:words){
for(char c:s){
records[i][c-'a'] ++;
}
i++;
}
vector<string> result;
for(int i=0;i<26;i++){
int min=200;
int flag=0;
for(int j=0;j<words.size();j++){
if(records[j][i]==0) {
flag=1;
break;
}
else if(records[j][i]<min)
min=records[j][i];
}
if(flag==1)
continue;
else{
for(int k=0;k<min;k++) {
string temp(1, 'a' + i);
result.push_back(temp);
}
}
}
return result;
}
Comments NOTHING