题目
思路
找到一个键值,但是有个问题在于键值要怎么定,来避免冲突的哈希地址,自然而言就想到了素数的乘积的方式。也就是给每一个字母赋予一个素数,以总体计算的数值作为键值。但是这样会存在一个问题,素数的成绩经过后台的测试会爆int和long long,因此这道题只能用double来存储最终的键值。
代码
class Solution {
public:
//26个素数
vector<double> table = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97, 101};
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<double, vector<string>> hashTable;
for(auto str : strs){
double key = 1;
//算键值
for(auto s : str) key *= table[s-'a'];
hashTable[key].push_back(str);
}
vector<vector<string>> ans;
//将键值放到结果数组中
for(auto h : hashTable){
ans.push_back(h.second);
}
return ans;
}
};