本题源自leetcode
--------------------------------------------------
例如:: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
返回:[ ["ate", "eat","tea"],["nat","tan"], ["bat"] ]
思路:
1 用一个map做映射,map<string,multiset<string>> 用 set 可以包含重复的还有序。遍历数组把每一个字符串排序,然后按排序的字符串为键,源字符串为值存入map,
2 最后遍历map 所有有相同字符的串都在一个set中
代码:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> result;
map<string,multiset<string>> mp;
for(int i=0;i<strs.size();i++){
string t=strs[i];
sort(t.begin(),t.end());
mp[t].insert(strs[i]);
}
for(auto m:mp){
vector<string> tmp(m.second.begin(),m.second.end());
result.push_back(tmp);
}
return result;
}