解题思路见代码,暴力!
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
vector<string> _res;
vector<string> temp;
//将strs里面的每个string排序,排序一个就放进temp中
//也就是说strs和temp是一一对应的关系,一个是原来的string,一个是排序好的string
for(auto v:strs){
sort(v.begin(),v.end());
temp.push_back(v);
}
//表示当前string是否被用过了,全部初始化为true,表示所有string没有被使用过
vector<bool>flag(strs.size(),true);
for(int i=0;i<temp.size();++i){
if(flag[i]==false)continue;
_res.push_back(strs[i]);
flag[i]=false;
for(int j=i+1;j<temp.size();++j){
if(flag[j]==false)continue;
if(temp[i]==temp[j]){
_res.push_back(strs[j]);
flag[j]=false;
}
}
res.push_back(_res);
_res.clear();
}
return res;
}
};
官方的解题思路:
因为假如是变位词组,那么string用sort排序以后肯定是相同的,那么可以用排序后的string作为键值,value值用vector(之前没有意识到,value值可以是数组,233,学到了,其实上面自己的做法也是这个思路,不过自己把问题复杂化了)。
最后遍历map的key,把value值放进二维数组中即可啦!
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<string,vector<string>>m;
for(auto v:strs){
string key=v;
sort(key.begin(),key.end());
m[key].push_back(v);
}
vector<vector<string>> res;
for(auto v:m){
res.push_back(v.second);
}
return res;
}
};