题目大意:求同构词,同构词就是单词字母都一样,出现次数也一样,只是排列顺序不同
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
unordered_map<long, vector<string> > dict;
vector<string> result;
for(vector<string>::iterator iter = strs.begin(); iter != strs.end(); iter++) {
long hashCode = fingerprints(*iter);
dict[hashCode].push_back(*iter);
}
for(unordered_map<long, vector<string> >::iterator iter = dict.begin(); iter != dict.end(); iter++) {
if((iter->second).size() > 1) {
result.insert(result.end(), (iter->second).begin(), (iter->second).end());
}
}
return result;
}
private:
long fingerprints(string str) {
sort(str.begin(), str.end());
long result = 1125899906842597;
for(int i = 0; i < str.size(); i++) {
result = 31 * result + str[i];
}
return result;
}
};