【leetcode】Anagrams
1495 ワード
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 anagrams(vector& strs) {
unordered_map 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 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で各ソート後の文字列キー値をマッピングに対応させる
文字列が1回しか現れない場合は出力しません
1回以上発生した場合は結果を出力