核心问题在于如何(快速)判断字母异位词,很容易想到字符串匹配里面的RK算法
,其实就是一种编码方式。最简单的可以将每个单词的每个字母的ascii码
加起来,因为字母异位词加起来得到的和必然是相同的,但是单词太多就可能冲突:不是字母异位词加起来也可能相同,既然加不行,可以乘啊,而且不一定非要用一个整数来编码,用字符串也可以,排序就是字符串的思路。
排序
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map<string, vector<string>> m;
for(int i = 0; i < strs.size(); ++i){//排序
auto s = strs[i];
sort(s.begin(), s.end());
m[s].push_back(strs[i]);
}
for(const auto &