字母异位词分组

last modify

49. 字母异位词分组 - 力扣(LeetCode)

问题简述

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

思路

  • 设计一个方法将字母异位词转化为相同的 key, 然后使用字典存储;

Python: 写法 1
  • 将 s 排序后保存为 key;

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        from collections import defaultdict
        
        def to_key(s):
            return tuple(sorted(s))  # ''.join(sorted(s))

        ret = defaultdict(list)
        for s in strs:
            ret[to_key(s)].append(s)
        
        return list(ret.values())
Python: 写法 2
  • 记录每个字符出现的次数;

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        from collections import defaultdict
        
        def to_key(s):
            cnt = [0] * 26
            for c in s:
                cnt[ord(c) - ord('a')] += 1
            return tuple(cnt)

        ret = defaultdict(list)
        for s in strs:
            ret[to_key(s)].append(s)
        
        return list(ret.values())

Last updated