【Python刷力扣hot100】49. Group Anagrams

问题

给定一个字符串数组 strs,将字母异位词组合在一起。返回的答案可以按任意顺序排列。

字母异位词(Anagram):由相同字母按照不同顺序排列组成的字符串,例如 "listen" 和 "silent"、"eat" 和 "tea" 均为字母异位词。

例1:

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

输出: \["bat","nat","tan","ate","eat","tea"]

  • 解释:
    • There is no string in strs that can be rearranged to form "bat".
    • The strings "nat" and "tan" are anagrams as they can be rearranged to form each other.
    • The strings "ate", "eat", and "tea" are anagrams as they can be rearranged to form each other.

例2:

输入: strs = ""

输出: \[""]

例3:

输入: strs = "a"

输出: \["a"]

约束条件:

  • 字符串数组 strs 的长度满足:1 ≤ strs.length ≤ 10⁴(即数组中至少有 1 个字符串,最多不超过 10000 个字符串)
  • 数组中每个字符串 strsi 的长度满足:0 ≤ strs i.length ≤ 100(即单个字符串可能为空字符串,最长不超过 100 个字符)
  • 字符串 strsi 仅由小写英文字母组成(无大写字母、数字、符号等其他字符)

解:哈希表

  1. 设原始数据在list1中,可以把每个单词按字母排序,显然所有的字母异位词排序后会得到相同的单词。
  2. 把该集合存入哈希表(key:排序后的单词。value:原始单词)。但是相同的key只能有1个,所以value是一个存储了原始单词的list
  3. 遍历所有key,分别把每个key对应的value存入list2。list2就是我们要的结果

时间复杂度 O ( n k l o g k ) O(nklogk) O(nklogk): n n n是字符串数量, k k k是字符串的最大长度。需要进行 n n n次排序操作,一次排序操作的时间复杂度是 O ( k l o g k ) O(klogk) O(klogk)。

空间复杂度 O ( n k ) O(nk) O(nk):随着数组规模的增大,我们使用哈希表的空间也会等比增大,需要额外占用的空间也会增大。

python 复制代码
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        # 创建哈希表,key为排序后的字符串,value为原始字符串列表
        anagram_dict = {}
        for s in strs:
            # 对字符串按字母排序,作为哈希表的key
            sorted_str = ''.join(sorted(s))
            
            # 如果key已存在,将当前字符串添加到对应列表
            if sorted_str in anagram_dict:
                anagram_dict[sorted_str].append(s)
            # 如果key不存在,创建新的列表并添加当前字符串
            else:
                anagram_dict[sorted_str] = [s]
        # 将哈希表中的所有值(列表)组成新列表返回
        return list(anagram_dict.values())

参考

https://leetcode.cn/problems/group-anagrams

相关推荐
2601_966949655 分钟前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
萧鼎12 分钟前
2026实战:用 accelerate 库加速 PyTorch 训练,核心语法与避坑指南
python·开源·教程·python库·accelerate
我命由我1234534 分钟前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11
落魄大学生之流水线上谋生计1 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
hahaha60161 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
王志来137944730081 小时前
安防监控工控工业服务器配套
运维·服务器·python
投票竞赛1 小时前
作品投票版权注意事项,线上评选上传图片视频须知
python·音视频
2601_962293531 小时前
人工智能 & 神经网络完整入门路线(零基础可走,分阶段)
人工智能·python·深度学习·神经网络·机器学习
佳児素花痴╮1 小时前
Qt速通2
开发语言·qt
“AI国潮设计-小江”2 小时前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁英歌舞猫IP & 创意甜品设计(附ComfyUI工作流与商业授权说明)
开发语言·人工智能·python·prompt·aigc