本题要求如下:
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
本题思路比较直接,但是还是耗费了我不少精力,一部分是语法,另一部分是看题不仔细:代码如下:
class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> retVal;
map<string, vector<string>> str_map;
map<string, vector<string>>::iterator it;
for (int i = 0; i < strs.size(); ++i) {
string tmp = strs[i];
sort(tmp.begin(), tmp.end());
str_map[tmp].push_back(strs[i]);
}
for (it = str_map.begin(); it != str_map.end(); ++it) {
if (it->second.size() > 1) {
for (int j = 0; j < it->second.size(); ++j) {
retVal.push_back(it->second.at(j));
}
}
}
return retVal;
}
};
就是定义一个hashmap,hashmap的每个key都是经过sorted的string,所以,如果两个string是anagram的关系,他们的sorted string必然相同。。
这样本题就很直观了:
把input的每个值斗插入hashmap,key为sorted string,value为一个存储原来的string的vector
所以如果存在anagram的话,value的size()应该大于1,所以,把所以value.size()大于1的key对应的所有value输出就行了