Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
分析:对我这种英语不好的人来讲,理解题意比做题更加困难(捂脸)。
原题是要求把一系列字符串中由相同字母组成的字符串打印出来(顺序可以不同)。
于是可以对每个字符串拍寻,用一个hash table存之前是否出现过就可以了。
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> ans;
vector<string> sorted_strs(strs);
for(auto &s:sorted_strs){
sort(s.begin(), s.end());
}
unordered_map<string, int> Map;
for(int i = 0;i < strs.size();i++){
if(Map.find(sorted_strs[i]) == Map.end()){
Map[sorted_strs[i]] = i;
}else{
int c = Map[sorted_strs[i]];
if(c != -1){
ans.push_back(strs[c]);
Map[sorted_strs[i]] = -1;
}
ans.push_back(strs[i]);
}
}
return ans;
}
};