49题
思路
采用哈希算法,在将字符串进行字母排序时,将其放入到对应的 bucket 中,如果排序后是一模一样,则会处于同一个 bucket 中,最后将 bucket 中的字符串成堆取出即可。时间复杂度为 O(n)。
哈希,又名散列,英文名称 Hash。简单来说,哈希算法是在遍历数据的过程中,逐一给数据做标记,遍历完之后,如果想要寻找某个数据,只需根据标记即可快速找到。
代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
// vector<string> s = strs;
vector<vector<string>> result;
unordered_map<string, vector<string>> m;
for(auto s : strs){
auto tmp = s;
sort(s.begin(), s.end()); //对每个单词中的字母进行排序
m[s].push_back(tmp); //将单词放到对应的 vector 中
}
for(auto i_m : m){
result.push_back(i_m.second); //把同一类的单词放入 result 中同一个vector中
}
return result;
}
};