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

LeetCode 热题 100 - 2. 字母异位词分组(Java 题解)

LeetCode 热题 100 - 2. 字母异位词分组(Java 题解)

题目链接

字母异位词分组 - LeetCode

难度

中等

题目描述

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词,两个单词包含完全相同的字母,只是顺序不同。

解题思路

本题的核心是找到字母异位词的唯一标识。互为字母异位词的字符串,排序后一定是完全相同的字符串

因此解题思路如下:

  1. 遍历字符串数组,将每个字符串字符排序,排序后的字符串作为唯一 key
  2. 使用 HashMap 存储,key 是排序后的字符串,value 是对应字母异位词列表;
  3. 遍历完成后,将 Map 中的所有 value 收集起来,就是最终分组结果。

这是最直观、面试最常写的解法,代码简洁易理解。

复杂度分析

  • 时间复杂度:O(nklogk)
    • n 是字符串数组长度,k 是字符串最大长度;
    • 每个字符串排序耗时 O(klogk)。
  • 空间复杂度:O(nk),存储所有字符串。

解题代码(Java)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;class Solution {public List<List<String>> groupAnagrams(String[] strs) {// key:排序后的字符串,value:对应的字母异位词列表Map<String, List<String>> map = new HashMap<>();for (String str : strs) {// 转为字符数组并排序,生成唯一keychar[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);// 从map中取出对应列表,不存在则创建新列表List<String> temp = map.getOrDefault(key, new ArrayList<>());temp.add(str);map.put(key, temp);}// 将map的值转为ArrayList返回return new ArrayList<List<String>>(map.values());}
}

代码解析

  1. HashMap 作用

    排序后的字符串为 key,把所有字母异位词聚合到同一个列表。

  2. 排序生成 key

    把字符串转成字符数组排序后,再转回字符串,互为异位词的字符串会得到相同 key。

  3. getOrDefault 方法

    简化代码:如果 key 不存在,返回空列表;存在则返回已有列表。

  4. 结果返回

    map.values() 拿到所有分组,再包装成 ArrayList 返回。

示例演示

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

排序后 key:

  • "eat" → "aet"
  • "tea" → "aet"
  • "tan" → "ant"
  • "ate" → "aet"
  • "nat" → "ant"
  • "bat" → "abt"

最终分组:

[["eat","tea","ate"],["tan","nat"],["bat"]]

易错点提醒

  1. 必须先排序再作为 key,不能直接用原字符串;
  2. 注意字符数组转字符串的写法:new String(array)
  3. 不要忘记导包:ArraysHashMapListArrayList

总结

本题是 HashMap + 字符串排序 的经典应用,核心思想是用排序后的字符串作为唯一标识进行分组,是面试高频题,代码简洁、思路清晰,必须熟练掌握。

持续更新 LeetCode Hot100 Java 题解,面试向~

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

相关文章:

  • SecGPT-14B参数详解:vLLM中max_model_len、tensor_parallel_size调优实践
  • GTE文本向量-large开源模型部署教程:ModelScope离线模型下载+本地路径映射
  • 手把手教你用HITRANonline网页版,5分钟搞定乙炔光谱数据筛选与下载
  • SEATA分布式事务——AT模式性
  • Cursor Pro破解工具完全指南:三步解锁无限AI编程能力
  • 4月盘点:高频扭转试验机品牌推荐与性能对比(2026版) - 品牌推荐大师
  • 5步精通PCILeech:DMA内存取证实战深度指南
  • C#高效检测文件占用状态的两种实战方案
  • 8大网盘直链下载助手:打破下载壁垒的浏览器神器
  • 进化计算(八)——MOEA/D算法实战:从理论到代码实现
  • StructBERT情感分类效果展示:同一文本不同置信度阈值下的分类稳定性
  • 从双非到技术大牛:硬件工程师的进阶实战指南
  • [Android] 蓝叠模拟器工具箱v1.1
  • 赛博朋克2077存档编辑器完全指南:如何彻底掌控你的夜之城冒险
  • 别再手动调RTL了!用Verilog高级综合给AI加速器‘瘦身’,功耗直降30%的实战记录
  • 2026勿拍厂家推荐排行榜产能与专利双优企业权威解析 - 爱采购寻源宝典
  • 3步完成分子对接:AutoDock Vina在macOS上的终极安装指南
  • 2025远程控制技术全景:从性能横评到开发者选型指南
  • douyin-downloader完整指南:从零构建抖音视频批量下载系统的深度解析与实战教程
  • 终极备份方案:用GetQzonehistory永久保存QQ空间青春记忆
  • Windows 11任务栏歌词:如何在桌面实现无缝歌词悬浮体验
  • i.MXRT开发者必看:串行NAND Flash为何在FlexSPI下无法实现XiP?
  • 2026玻璃棉卷毡厂家推荐排行榜产能与专利双维度权威对比 - 爱采购寻源宝典
  • 2026玻璃棉板厂家推荐排行榜产能、专利、环保三维度权威对比 - 爱采购寻源宝典
  • MySQL 二级索引覆盖查询实例
  • Qwen2.5-32B-Instruct代码风格检查:Python PEP8规范实践
  • 教你快速回收永辉超市购物卡! - 团团收购物卡回收
  • 杰理之启音乐通路谐波激励器后,播放蓝牙音频出现死机【篇】
  • 终极指南:如何用BallonsTranslator实现漫画翻译自动化?
  • 告别机械音!Qwen3-TTS实测:用文字描述生成自然生动的人声