1 class Solution 2 { 3 public: 4 vector<vector<string>> groupAnagrams(vector<string>& strs) { 5 map<string, vector<string>> anagram; 6 //内部进行排序的各个单词为key,以字符串向量vector<string>为value,存储各个字符数量相同的字符串(anagram:变位词) 7 vector<vector<string>> result; 8 for (int i = 0; i < strs.size(); i++) { //遍历每个单词 9 string str = strs[i]; 10 sort(str.begin(), str.end()); //对str进行内部排序 11 if (anagram.find(str) == anagram.end()) {//若无法在哈希表中找到str(新的一个排序好的字符串) 12 vector<string> item; //设置一个空字符串向量 13 anagram[str] = item; //以排序后的strs[i]作为key 14 } 15 anagram[str].push_back(strs[i]); //在对应的字符向量中push结果 16 } 17 map < string,vector<string >> ::iterator it; 18 for (it = anagram.begin(); it != anagram.end(); it++) { 19 result.push_back(it->second); 20 } 21 return result; 22 } 23 };
法2:
1 void change_to_vector(string& str,vector<int> &vec) { 2 for (int i = 0; i < 26; i++) { 3 vec.push_back(0); 4 } 5 for (int i = 0; i < str.length(); i++) { 6 vec[str[i] - ‘a‘]++; 7 } 8 } 9 10 class Solution 11 { 12 public: 13 vector<vector<string>> groupAnagrams(vector<string> &strs){ 14 map<vector<int>, vector<string>> anagram; 15 vector<vector<string>> result; 16 for (int i = 0; i < strs.size(); i++) { 17 vector<int> vec ; 18 change_to_vector(strs[i], vec); 19 if (anagram.find(vec) == anagram.end()) { 20 vector<string> item; 21 anagram[vec] = item; 22 } 23 anagram[vec].push_back(strs[i]); 24 } 25 map<vector<int>, vector<string>>::iterator it; 26 for(it = anagram.begin(); it != anagram.end(); it++) { 27 result.push_back(it->second); 28 } 29 return result; 30 } 31 };
原文:https://www.cnblogs.com/ccllcc/p/12569089.html