Given an array of strings, group anagrams together.
For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:
[
[“ate”, “eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]
Note: All inputs will be in lower-case.
思路:哈希表法。本题的关键是这些乱序的字符串排序后可以归为一组,所以用排序后的字符串为键,排序前的字符串组为键值,构建哈希表即可,最后遍历哈希表的键值。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
if(strs.empty()) return vector<vector<string>>();
vector<vector<string>>ret;
map<string,vector<string>>mv;
for(int i=0;i<strs.size();i++)
{
string str=strs[i];
sort(str.begin(),str.end());
mv[str].push_back(strs[i]);
}
for(map<string,vector<string>>::iterator iter=mv.begin();iter!=mv.end();iter++)
{
ret.push_back(iter->second);
}
return ret;
}
};