题目:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[["ate","eat","tea"],["nat","tan"],["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
采用hashmap,键key为排序后的字符串,值为相同字母不同排列顺序的字符串;
把值依次存储到容器中,即为结果
代码如下:
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string> > htb;vector<vector<string> > anagrams;for(int i = 0; i < strs.size(); i++){string str = strs[i];sort(str.begin(),str.end());htb[str].push_back(strs[i]); }for(auto e:htb){anagrams.push_back(e.second);}return anagrams;}
};
将字符串排序算法重写,在字符串较长的情况下会提高效率。统计每个字符的个数,拼接成字符串,来判断是否为相同字母不同顺序的字符串
class Solution {
public:string sortStr(string s){int hab[26] = {0};for(auto e:s){hab[e - 'a']++;}string t = "";for(int i = 0; i < 26; i++){t += string(hab[i], i + 'a');}return t;}vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string> > htb;vector<vector<string> > anagrams;for(int i = 0; i < strs.size(); i++){string str = strs[i];//sort(str.begin(),str.end());str = sortStr(str);htb[str].push_back(strs[i]); }for(auto e:htb){anagrams.push_back(e.second);}return anagrams;}
};