利用 std::hash 对组合进行 hash
主要是记录下 std::hash 的用法,结合 lambda 表达式,感觉这样挺方便的,虽然现在看起来还是挺晕
例子 [LEETCODE49]
Description
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
Solution
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
auto GetHash=[f=hash<int>{}] (const array<int,26>& arr)->size_t {
return accumulate(arr.begin(),arr.end(),0u,[&](size_t acc,int num){return (acc<<1)^f(num);});
};
unordered_map<array<int,26>, vector<string>, decltype(GetHash)> mp(0,GetHash);
for(string& str:strs)
{
array<int,26> counts{};
int length=str.length();
for(int i=0;i<length;i++)
counts[str[i]-'a']++;
mp[counts].emplace_back(str);
}
vector<vector<string>> ans;
for(auto i:mp) ans.emplace_back(i.second);
return ans;
}
};