1、排序 哈希表
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
map<string,vector<string>> m;
int n = strs.size();
for (int i = 0; i < n; i++) {
string temp = strs[i];
sort(strs[i].begin(), strs[i].end());
m[strs[i]].push_back(temp);
}
for (auto p : m) {
ans.push_back(p.second);
}
return ans;
}
ps:可以用emplace_back代替push_back 代码几乎完全相同,但底层实现不同,可以提高效率
ps:第一段循环也用for(string t:strs)形式,也可以提高效率
ps:map改成unordered_map,还是可以提高效率
(map用于有序问题,底层为红黑树;unordered_map用于查找问题,底层为哈希表)
2、计数 哈希表
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
map<vector<int>,vector<string>> m;
int n = strs.size();
for (int i = 0; i < n; i++) {
int len = strs[i].size();
vector<int> v(26);
for (int j = 0; j < len; j++) {
v[strs[i][j]-'a']++;
}
m[v].emplace_back(strs[i]);
}
for (auto p : m) {
ans.emplace_back(p.second);
}
return ans;
}