这题难的就是分组
用的是map,第一个类型是string,表示出现的字符串。第二个类型是vector<string>,表示对应字符串出现的集合。注意:这里第一个类型string,是经过排序的。
最后再用一个二维数组,接住map中的 second
时间复杂度是: O(n * k* logk)。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
unordered_map<string, vector<string>> map;
for(string &str: strs)
{
string key = str;
sort(key.begin(), key.end());
map[key].push_back(str);
}
for(auto it = map.begin(); it != map.end(); it++)
{
res.push_back(it->second);
}
return res;
}
};
这个是看题解的,更很快,没有用到排序
时间复杂度是: O ( N * K)
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res ;
map<string, vector<string>> map ;
// 统计string的各字母频次,以频次为key直接加入队列
for (auto s : strs) {
string sts = string(26, '0') ;
for (auto c : s) ++ sts[c-'a'] ;
map[sts].emplace_back (s) ;
}
for (auto e : map) res.emplace_back(e.second) ;
return res ;
}