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

LeetCode(Hot.2)—— 49.字符异位词分组题解

Problem: 49. 字母异位词分组

字母异位词的定义是:两个单词的字母组成一样,但顺序可以不同,比如 eat、tea 和 ate 就是一个组的。

思路

将每个字符串按字母排序,把排序后的字符串作为 key,相同 key 的放在一个 list 中,最终将这些 list 返回。

解题过程

  1. 核心思想:

    • 字母异位词排序后是相同的字符串。

    • 我们可以将每个字符串排序后,作为 map 的 key,原始字符串作为 value。

    • 如果多个字符串排序后结果一致,说明它们属于同一个“异位词”组。

  2. 实现方式:

(1)使用一个 HashMap<String, List>:

  • key:排序后的字符串(唯一标识一组异位词)。
  • value:原始字符串组成的列表。

(2)遍历输入数组 strs:

  • 每个字符串转为字符数组并排序。
  • 把排序后的字符串作为 key,根据 key 获取已有的 list,没有则新建。
  • 把原字符串添加到对应的 list 中。

(3)最后返回 map 中所有的 value(即每组异位词)。

复杂度

  • 时间复杂度:O(n * k log k)

    • 是字符串个数
    • 是字符串最大长度(每次排序耗时 O(k log k))
  • 空间复杂度:O(n * k)

    • 用于存储结果列表和中间 map

Code

class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String, List<String>> map = new HashMap<>();for(String str : strs) {// 1. 将每个单词转成 char 数组,并且进行排序char[] temp = str.toCharArray();Arrays.sort(temp);String key = new String(temp);// 2. 排序后的值作为 key,原始值作为 List 集合中的 value。相同的 key 存在同一个 List<String> 中List<String> list = map.getOrDefault(key, new ArrayList<>());list.add(str);map.put(key, list);}return new ArrayList<>(map.values());}
}

相关文章:

  • 【win 1】win 右键菜单添加 idea pycharm vscode trae 打开文件夹
  • 笔试专题(十一)
  • 什么编程语言市场竞争小,但还易学?
  • Docker应用端口查看器docker-port-viewer
  • 基于springboot的老年医疗保健系统
  • HTML5 应用程序缓存:原理、实践与演进
  • 【Vue】模板语法与指令
  • 图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化
  • 【Linux】线程ID、线程管理、与线程互斥
  • 【概率论】条件期望
  • rebase和merge的区别
  • 【图片识别改名工具】图片文件区域OCR识别并自动重命名,批量识别指定区域根据指定识别文字批量改名,基于WPF和阿里云的技术方式实现
  • Ethan独立开发产品日报 | 2025-04-18
  • 汽车故障诊断工作原理:从需求到AUTOSAR诊断模块协作的浅析
  • Android 热点二维码简单示例
  • 0801ajax_mock-网络ajax请求1-react-仿低代码平台项目
  • 论文阅读:2024 ICLR Workshop. A STRONGREJECT for Empty Jailbreaks
  • 每日两道leetcode
  • SRS流媒体服务器
  • 学习笔记十八——Rust 封装
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 共绘“彩色上海”,IP SH艺术共创沙龙首期圆满举办
  • 美国清洗政治:一幅残酷新世界的蓝图正在展开
  • “麒麟王”亮相上海彩市,体彩即开票“瑞兽家族”迎来新成员
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼
  • 商超展销延长、专区专柜亮相……上海“外贸拓内销”商品与市民见面