【LeetCode HOT100】49. 字母异位词分组

加载中... 浏览

题目

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

字母异位词:通过重新排列源单词的所有字母得到的新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
解释:
在 strs 中没有字符串可以通过重新排列来形成 "bat"。
字符串 "nat" 和 "tan" 是字母异位词,因为它们可以重新排列以形成彼此。
字符串 "ate" ,"eat" 和 "tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

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

示例 3:

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

提示

一句话思路:互为异位词的两个字符串,把字母排序后一定得到相同的结果,用它作为哈希表的 key 来分组。

  • 把每个字符串 s 排序得到 sorted_s,作为分组键,值存一个列表装原始字符串。
  • 最终答案就是哈希表中所有 value 组成的列表。
  • 时间复杂度 O(n·k·logk),n 是字符串个数,k 是最长字符串长度(排序开销)。

答案

python
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        d = {}                              # 哈希表:分组键 -> 该组的字符串列表
        for s in strs:                      # 遍历每个字符串
            sorted_s = ''.join(sorted(s))   # 排序后的字符串,互为异位词结果相同
            if sorted_s not in d:           # 分组键还不存在,先建一个空列表
                d[sorted_s] = []
            d[sorted_s].append(s)           # 把原字符串加入对应分组
        return list(d.values())             # 取出所有分组列表作为结果

留言板

加载评论中...
【LeetCode HOT100】283. 移动零
Socket 通信和 RPC 通信对比学习
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1