49. 字母异位词分组

题目描述

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

C++

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        // 采用map
        // 字母异位字符串排序后是相同的
        vector<vector<string>> res;
        unordered_map<string, vector<string>> umap;

        for(auto str : strs)
        {
            string key = str;
            sort(key.begin(), key.end());
            umap[key].emplace_back(str);
        }

        for(unordered_map<string, vector<string>>::iterator it = umap.begin(); it != umap.end(); ++it)
        {
            res.emplace_back(it->second);
        }
        return res;
    }
};

python

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        # 创建一个默认值类型为 list 的 map容器
        mp = collections.defaultdict(list)

        for str in strs:
            key = "".join(sorted(str))
            mp[key].append(str)

        return list(mp.values())

你可能感兴趣的:(LeetCode错题集,leetcode,c++,算法)