原题链接:字母异位词分组
个人解法
思路:
同一个字母异位词满足字符串中每个字符出现的次数都相等,那么我们其实可以用C++中的map来表示一个字符串,然后再利用map的哈希来直接查找其对应的字母异位词组,加入到其中即可。
注:这里对于字符串是否属于同一个字母异位词的组还能对字符串进行排序来做哈希,这样可以省略用map
时间复杂度: O ( l e n ( s t r s ) ∗ l e n ( s t r ) ∗ l o g n ) O(len(strs)*len(str)*logn) O(len(strs)∗len(str)∗logn),map底层实现为红黑树,查找和插入的时间复杂度为 O ( l o g n ) O(logn) O(logn)
代码:
class Solution {
public:
map<map<char, int>, vector<string>> mp;
vector<vector<string>> groupAnagrams(vector<string>& strs) {
for(auto &str : strs) {
map<char, int> st;
for(auto &c : str) {
st[c] ++;
}
mp[st].push_back(str);
}
vector<vector<string>> res;
for(auto &entity : mp) {
res.push_back(entity.second);
}
return res;
}
};