算法思路
哈希表
字母异位词指字母相同,但排列不同的字符串。所以对于不同的字母异位词,将其排序后,它们就都一样了。题目要求返回所有字母异位词分组,所以我们的思路是建立一个哈希表,它的第一关键字是该单词排序后的结果,第二关键字是以所有排序后为第一关键字的字母异位词的集合。依次遍历每个单词,用一个临时变量表示该单词,然后将其排序,然后将原单词插入以排序后的单词作为关键字的哈希表中。最后遍历一次哈希表,所有的第二关键字均为不同字母异位词分组。
C++代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> hash;
for (auto s : strs)
{
string tmp = s;
sort(tmp.begin(), tmp.end());
hash[tmp].push_back(s);
}
vector<vector<string>> res;
for (auto item : hash)
res.push_back(item.second);
return res;
}
};