LC 49哈希表中等第 22 / 95 题

字母异位词分组

Group Anagrams

哈希表排序键
本机进度仅保存在当前浏览器

题目描述

给你一个字符串数组,请你将「字母异位词」组合在一起(字母相同、排列不同的词),返回分组结果。

示例:输入 ["eat", "tea", "tan", "ate", "nat", "bat"],输出 [["eat","tea","ate"],["tan","nat"],["bat"]]。

解题思路

  1. 分组问题要有「组键」:同一组内所有元素映射到同一个键。
  2. 键的两种取法:把字符串排序后的结果(如 eat/tea/ate 都变成 aet);或 26 位字母计数向量转元组。
  3. 用哈希表「键 -> 分组列表」聚合,最后输出全部值;计数键对长字符串更优(免排序)。

参考实现

查看参考实现Python · 建议先自行作答
from collections import defaultdict

def groupAnagrams(strs):
    groups = defaultdict(list)
    for s in strs:
        # 排序结果作为异位词的统一组键
        key = ''.join(sorted(s))
        groups[key].append(s)
    return list(groups.values())

复杂度与归属

时间复杂度O(n · k log k)
空间复杂度O(n · k)
所属分类哈希表
题源LeetCode 49

关联教程

返回题图鉴