利用 std::hash 對組合進行 hash
阿新 • • 發佈:2020-12-15
利用 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; } };