给你一个字符串数组,请将字母异位词组合在一起。可以按任意顺序返回结果列表。

示例 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;
}