49. Group Anagrams
题目:
Given an array of strings, group anagrams together.
(给定一个字符串数组,将他们根据anagram归类)
样例:
given:
["eat", "tea", "tan", "ate", "nat", "bat"]
,
Return:[["ate", "eat","tea"],["nat","tan"],["bat"]]
思路:
对于这道题,字符串是否属于同一类,有一个很明显的特征,就是对相同类的字符串而言,单个字符串按照字母顺序排序之后,得到的排序结果是相同的,如eat与tea,排序后得到的结果都是aet。
基于这样的前提,我们可以建立这样的哈希表:索引值是字符串排序后的结果,而哈希值则为得到这个结果的所有字符串。对于输入的每一个字符串,先排序,然后放到哈希表中,就完成了字符串的归类。
最后,只需要将哈希表转换为字符串数组组成的vector就可以了。
代码:
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { map<string,vector<string> > m; vector<vector<string>> res; for(int i = 0 ; i < strs.size() ;i ++) { string curr = strs[i]; string temp = curr; sort(temp.begin(),temp.end()); m[temp].push_back(curr); } for(map<string,vector<string> >::iterator it = m.begin();it!=m.end();it++) res.push_back(it->second); return res; } };