重构词的特点是 排序后相同。
所以用一个hashmap,排序后为key,value为所有重构词的集合。
最后扫面map,把集合元素数大于一的string输出到结果。
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> res;
unordered_map<string,vector<string> >m;
for(int i=0;i<strs.size();++i){
string tmp = strs[i];
sort(tmp.begin(),tmp.end());
if(m.find(tmp)==m.end()){
m[tmp] = vector<string>();
m[tmp].push_back(strs[i]);
}
else
m[tmp].push_back(strs[i]);
}
unordered_map<string,vector<string> >::iterator it;
for(it=m.begin();it!=m.end();++it){
if(it->second.size()>1){
for(int i=0;i<it->second.size();++i)
res.push_back(it->second[i]);
}
}
return res;
}
};