Given an array of strings, group anagrams together.
For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note:
我们可以利用map来解决这个问题。map的key设置为排序后的字符串,value为字符串数组,将每一个排序之后的值为key的字符串加入value这个数组。对于每一个字符串s,复制一个副本str,将str排序后,将s加入map[str]中。然后依次遍历map,将value对应的数组排序之后加入将要返回的result数组中。最后返回result即可。
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string,vector<string>> map; for(auto &s: strs){ string str(s); sort(str.begin(),str.end()); map[str].push_back(s); } vector<vector<string>> result(map.size()); int i=0; for(auto it=map.begin();it!=map.end();it++,i++){ result[i].swap(it->second); sort(result[i].begin(),result[i].end()); } return result; } };
原文:http://www.cnblogs.com/zhoudayang/p/5114324.html