给你一个字符串数组,请将字母异位词组合在一起。可以按任意顺序返回结果列表。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
思路:每个字符串 -> 统计字符次数 -> 编码成一个字符串作为 key。用 unordered_map 来组织管理。最后把所有 unordered_map 中的值加入一个数组就是答案。
C++19 linesExpandCollapse
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
unordered_map<string, vector<string>> mp;
for (string& s : strs) {
vector<int> cnt(26, 0);
// 统计字符出现次数
for (char c : s) cnt[c - 'a']++;
// 次数数组编码成 key
string key = "";
for (int x : cnt) {
key += to_string(x);
key += '#';
}
// 按编码加入到哈希表中
mp[key].push_back(s);
}
for (auto& [key, strs] : mp) ans.push_back(strs);
return ans;
}