class Solution {
public:
string sortedString(string &str){
int count[26];
string sortedStr = "";
for(int i = 0; i < 26; i++){
count[i] = 0;
}
for(int i= 0; i < str.size(); i++){
count[str[i] - 'a']++;
}
for(int i = 0; i < 26; i++){
for(int j = 0; j < count[i]; j++ ){
sortedStr = sortedStr + (char)('a' + i);
}
}
return sortedStr;
}
vector<string> anagrams(vector<string>& strs) {
unordered_map<string, int> map;
for(int i = 0; i < strs.size(); i++){
string str = sortedString(strs[i]);
if(map.find(str) == map.end()){
map[str] = 1;
}else{
map[str]++;
}
}
vector<string> anagrams;
for(int i = 0; i < strs.size(); i++){
string str = sortedString(strs[i]);
if(map.find(str) == map.end()){
continue;
}else{
if(map[str] > 1){
anagrams.push_back(strs[i]);
}
}
}
return anagrams;
}
};
以上是AC代码
主要思路就是
先把字符串数组里的每个字符串进行排序
然后再用hash把每个排序之后的字符串键值与其映射对应起来
如果某个字符串在只出现一次 则不输出
如果出现多于一次 则输出结果