题意
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
样例
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
思路
1.排序后的字符串相同就是同一组
2.运用到排序+哈希表
3.哈希表是映射下标,比如 cnt["res"] = 0;
4.排序是用于看他们是否为一组
代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,int> cnt;//映射
vector<vector<string>> res(strs.size());
int t = 0;
for (int i = 0;i < strs.size();i ++){//线性遍历
string tt = strs[i];
sort(tt.begin(),tt.end());//排序
if (!cnt.count(tt)) //说明还没有发生过映射当前的key
cnt[tt] = t++;
res[cnt[tt]].push_back(strs[i]);//加入相应的组
}
return vector<vector<string>>(res.begin(),res.begin()+t);
//为什么不是res.end(),因为相同组会导致有数组空值
}
};