题目描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一
题解:利用map来去重,每个字符串先排序,判断是不是一组,再push_back即可
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
// if(strs.size()== 0)
// {
// // return vector<vector<string>>{{""}};
// return res;
// }
// vector<int> a(10001,0);
// vector<int> b;
// 可以尝试将每个字母存为质数,用相乘结果去重
// for(int i = 0;i<strs.size();i++)
// {
// // a[i]+=strs[i].size()*1000;
// for(int j = 0;j<strs[i].size();j++)
// {
// // a[i] += (strs[i][j] -'a'+1)*10;
// b.push_back(strs[i][j]-'a'+1);
// }
// sort(b.begin(),b.end());
// for(int j = 0;j<b.size();j++)
// {
// // a[i]*=2;
// a[i]+=b[j];
// }
// b.clear();
// }
// map<int, vector<string>> s;
// for(int i = 0;i< strs.size();i++)
// {
// s[a[i]].push_back(strs[i]);
// }
map<string, vector<string>> s;
for(int i = 0;i<strs.size();i++)
{
string key = strs[i];
sort(key.begin(),key.end());
s[key].push_back(strs[i]);
}
for(auto it = s.begin();it!= s.end();it++)
{
res.push_back((*it).second);
}
return res;
}
};