当前位置: 首页 > news >正文

LeetCode 49. 字母异位词分组:Python 排序哈希表解法详解

1. 问题描述

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

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

示例 1:

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

示例 2:

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

示例 3:

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

2. 核心思路分析

字母异位词的核心特征是:排序后字符串相同。例如 "eat"、"tea"、"ate" 排序后都是 "aet"。

因此,我们可以将每个字符串排序后的结果作为哈希表的键,将原始字符串添加到该键对应的列表中。这样,所有字母异位词就会被自动分组到同一个键下。

3. Python 代码实现

以下是完整的 Python 解法:

from typing import List import collections class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: hashmap = collections.defaultdict(list) for st in strs: # 先用 sorted 函数对字符串进行排序 key1 = sorted(st) # 再用 join 函数拼接字符串 key = ''.join(key1) hashmap[key].append(st) return list(hashmap.values())

4. 代码逐行解析

  • 第 4 行:使用collections.defaultdict(list)创建一个默认值为空列表的哈希表。这样在访问不存在的键时,会自动创建一个空列表,避免 KeyError。
  • 第 5-9 行:遍历输入数组中的每个字符串。
    • sorted(st):将字符串转换为字符列表并排序,返回排序后的字符列表。
    • ''.join(key1):将排序后的字符列表重新拼接成字符串,作为哈希表的键。
    • hashmap[key].append(st):将原始字符串添加到该键对应的列表中。
  • 第 10 行:返回哈希表中所有值的列表,即分组后的结果。

5. 复杂度分析

  • 时间复杂度:O(nk log k),其中 n 是字符串数组的长度,k 是字符串的最大长度。对每个字符串排序需要 O(k log k) 时间。
  • 空间复杂度:O(nk),哈希表需要存储所有字符串。

6. 总结

字母异位词分组是哈希表应用的经典题目。通过将排序后的字符串作为键,可以巧妙地利用哈希表的特性实现高效分组。掌握这种思路对于解决类似的字符串分组问题非常有帮助。

http://www.jsqmd.com/news/1139878/

相关文章:

  • 面向非数字化商户的对话式AI系统设计:零登录、多语言、意图路由
  • HTTPS部署全攻略:从加密原理到Nginx/Apache实战配置
  • KES是什么?国产数据库技术架构、核心能力与选型实战解析
  • 兴庆区口碑好的斜视训练的眼视光中心
  • 一分钟快速学习 Play Framework 框架
  • 游戏角色阵亡就自动跳转抖音,复活后再自动跳转回游戏?核心代码拆
  • 如何在30分钟内完成专业级黑苹果配置:OpCore-Simplify终极指南
  • 七月札记:在算法与代码的缝隙中,寻找真实的反馈
  • 高德 / 百度 / 腾讯 / 滴图,四家地图 API 怎么选?降本增效选它就对了
  • Hermes Agent本地抓包指南:微信小程序协议分析与调试
  • AlmaLinux 9、Rocky Linux 9 升级到 10 版本
  • 小学阶段如何科学开展孩子视力养护?2026 护眼参考维度附专业测评数据
  • 06 权重幅值剪枝、剪枝后微调与稀疏网络训练:模型剪枝中的三个基本问题
  • 多模态宏观推演模型:世界黄金协会年中展望解析,下半年金价区间震荡的智能预测框架
  • Flashtool终极指南:解锁Sony Xperia设备的完整刷机解决方案
  • 计算机毕业设计之基于W-SVM的舆情分析系统的设计与实现
  • AutoGLM安卓端侧部署:手机本地运行大模型全指南
  • 在Windows平台构建企业级RTMP流媒体服务器的完整指南
  • 看个3D模型还得整台高配电脑?这款工具普通笔记本就能跑
  • PyTorch 实现 U-Net 转置卷积上采样:从4x4矩阵到完整代码的3步推导
  • 如何在3分钟内快速安装和使用猫抓浏览器插件下载网页视频
  • PyTorch 1.7.1 戴眼镜分类模型实战:Mobilenet_v2 112×112 输入实现 98.62% 准确率
  • Hermes Agent 0.17与DeepSeek集成:技术限制与替代方案分析
  • 2026年企业上Agent的真实落地率只有17%——剩下的83%,卡在哪了?
  • 如何快速美化Windows系统:终极标题栏特效指南
  • STM32F103C8T6 最小系统 PCB 设计:5大模块布局与 0.2mm 线宽布线实战
  • 开源AI模型本地部署实战:从环境搭建到性能优化全解析
  • 服务注册不上了,你敲了 5 个命令排查,第 3 个就找到了:8 个高频问题的一键排
  • 京东JoyAI UGC数字人:一张照片+语音创建专属虚拟玩伴
  • Nexus 3 npm 仓库迁移踩坑手册