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

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());}
}
http://www.xdnf.cn/news/427.html

相关文章:

  • ARINC818-实现
  • ueditorplus编辑器已增加AI智能
  • UI键盘操作
  • 计算机网络期中复习笔记(自用)
  • 【技术派后端篇】 Redis 实现用户活跃度排行榜
  • 【UniApp】Vue2 scss 预编译器默认已由 node-sass 更换为 dart-sass
  • 如何优雅地为 Axios 配置失败重试与最大尝试次数
  • PG,TRPO,PPO,GRPO,DPO原理梳理
  • Windows桌面图标变白的解决方案
  • 不连续数据区间天数累计sql
  • Python制作简易PDF查看工具PDFViewerV1.0显示优化
  • HTML5+CSS3小实例:CSS立方体
  • 【Lua语言】Lua语言快速入门
  • redis和lua为什么能实现事务
  • 在STM32的定时器外设中,选择使用哪个外部时钟配置函数
  • 猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
  • 【sylar-webserver】8 HOOK模块
  • Linux-进度条小程序
  • 【笔记】网路安全管理-实操
  • FiftyOne 管理数据
  • React-useRef
  • 实现Azure Data Factory安全地请求企业内部API返回数据
  • 图灵奖得主LeCun:DeepSeek开源在产品层是一种竞争,但在基础方法层更像是一种合作;新一代AI将情感化
  • Ubuntu20.04下Docker方案实现多平台SDK编译
  • 国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)
  • 【LeetCode 热题 100】双指针 系列
  • 【leetcode100】分割等和子集
  • systemctl管理指令
  • 为什么信号完整性对于高速连接器设计至关重要?
  • 计算机三级:信息安全基础技术与原理(2.1密码技术简单梳理)