算法刷题记录 —— 字母异位词分组(Group Anagrams)
题目链接49. 字母异位词分组题目分析这道题刚看到的时候确实没什么头绪。现在回过头来理解核心思想其实非常简洁利用哈希表的键值对机制——同一个键只能对应一条记录。​对于ant、tna、tan这样的字母异位词它们有一个共同的特点排序之后的字符串完全相同都是ant。既然如此把排序后的字符串作为哈希表的 key具有相同字母构成的单词天然就会被归到同一个 key 下面value 则用一个ListString来收纳这一组的所有原单词。本质上这是一种归一化思路——给每个单词找一个规范形式形式相同的归为一组。排序法是最直观的归一化手段此外也可以用计数法统计每个字母出现次数来构建 key但排序法代码最简洁。实现实现一基础写法classSolution{publicListListStringgroupAnagrams(String[]strs){MapString,ListStringmapnewHashMap();for(Strings:strs){char[]charss.toCharArray();Arrays.sort(chars);StringkeynewString(chars);if(!map.containsKey(key)){map.put(key,newArrayList());}map.get(key).add(s);}returnnewArrayList(map.values());}}逻辑很直白遍历每个单词 → 排序得到 key → 如果 key 不存在就新建一个空列表 → 把原单词加进去。最后map.values()直接就是分组结果。容易踩的两个坑​char[]不能直接当 key。Java 中数组的equals和hashCode基于对象引用而非内容两个内容相同的char[]会被当成不同的 key。必须用new String(chars)转成字符串。List的变量作用域。手写时容易把list声明在if块里面外部拿不到。可以用map.get(key)直接在外部获取引用更安全也更简洁。实现二使用computeIfAbsent简化classSolution{publicListListStringgroupAnagrams(String[]strs){MapString,ListStringmnewHashMap();for(Strings:strs){char[]charss.toCharArray();Arrays.sort(chars);// computeIfAbsent如果 key 不在哈希表中则插入一个新的 ArrayListm.computeIfAbsent(newString(chars),_-newArrayList()).add(s);}returnnewArrayList(m.values());}}思路和实现一一模一样区别在于用computeIfAbsent一行替代了手动判断containsKeyputget三步操作。computeIfAbsent的行为如果 key 存在返回对应的 value如果 key 不存在执行 Lambda 创建新列表并放入 map再返回这个新列表。拿到列表引用后直接.add(s)即可。代码量大幅减少可读性也更好。关键点总结① 为什么排序后就能分组字母异位词的定义是字母相同、排列不同。排序抹平了排列差异——eat、tea、ate排序后全是aet。排序结果天然就是分组依据。②char[]转String不可省略这是 Java 初学者最容易忽略的细节。数组类型的equals和hashCode是继承自Object的比较的是内存地址两个内容完全相同的char[]在 HashMap 眼中是不同的 key。new String(chars)才是值语义的比较。③computeIfAbsentvs 手动判断方式代码行数可读性适用场景手动containsKeyputget多适合新手理解流程逻辑较复杂的初始化computeIfAbsent一行简洁优雅大多数场景推荐使用小结字母异位词分组是一道哈希表的经典应用题难度不高但很能考察对 HashMap 核心特性的理解。抓住归一化 → 分组这条主线无论用排序还是计数都能顺利解决。推荐先用基础写法把流程走通再尝试用computeIfAbsent优化两种写法都熟练掌握之后这类题目基本可以秒过。

相关新闻

【Logisim 本地搭建】手动版无符号 8 位乘法器的详细教程

【Logisim 本地搭建】手动版无符号 8 位乘法器的详细教程

1. 引言 在数字逻辑与计算机组成原理的学习中,乘法器是一个核心组件,它展示了如何利用基本的逻辑门来实现复杂的算术运算。本教程将带领你在 Logisim 中构建一个手动版的无符号 8 位乘法器,通过清晰的步骤和原理讲解,让你掌握其设…

2026/10/10 17:50:37 阅读更多 →
YOLOv8 电力绝缘子缺陷检测全栈工程|4 类 VOC/YOLO 航拍数据集、PyQt5 可视化 GUI、ONNX 轻量化、全套训练评估曲线落地

YOLOv8 电力绝缘子缺陷检测全栈工程|4 类 VOC/YOLO 航拍数据集、PyQt5 可视化 GUI、ONNX 轻量化、全套训练评估曲线落地

目录 一、前言 二、3642 张绝缘子 4 类别航拍数据集完整解析 2.1 数据集基础完整参数 2.2 电力绝缘子数据集专属优势 2.3 数据集固有短板与配套涨点优化策略 三、YOLOv8 绝缘子缺陷专属涨点核心原理 四、三大电力巡检落地应用案例 案例 1 山区长距离无人机全域巡检 项…

2026/10/10 17:51:01 阅读更多 →
不只是收发 HEX:PcanWork 串口助手的交互终端、多行粘贴与长日志设计

不只是收发 HEX:PcanWork 串口助手的交互终端、多行粘贴与长日志设计

知乎原文:PcanWork Serial Tool 把串口助手和交互终端合在一起 传统串口助手擅长选择串口参数,然后收一段、发一段数据。但设备进入 Linux、Bootloader、AT 命令或交互式 Shell 场景后,普通收发框很快会暴露局限:命令历史不好用、…

2026/10/10 17:51:03 阅读更多 →

最新新闻

C++中判断汉字:从编码原理到跨平台实现

C++中判断汉字:从编码原理到跨平台实现

1. 从一次文本统计翻车说起:为什么“判断汉字”没那么简单前阵子帮一个做数据清洗的朋友处理一批用户提交的文本,需求听起来特别朴素:把每条记录里的汉字挑出来,统计一下字数,非汉字的字符(标点、数字、字母…

2026/10/12 13:20:31 阅读更多 →
鸿蒙开发实战:从零构建端侧AI阅读应用

鸿蒙开发实战:从零构建端侧AI阅读应用

简介:这份资源面向鸿蒙开发学习者与阅读类应用开发者,聚焦鸿蒙版阅读仓库的完整工程实现,可用于研究鸿蒙OS下阅读APP的页面结构、组件拆分与资源组织方式。压缩包共886个文件,约5.58MB,以ets组件代码为主,配…

2026/10/12 13:20:31 阅读更多 →
CSP-J初赛真题解析:算法直觉、缓存原理与递归栈深度训练

CSP-J初赛真题解析:算法直觉、缓存原理与递归栈深度训练

简介:本资源为2025年CCF CSP-J信息学奥林匹克竞赛初赛(第一轮)官方真题PDF文件,面向全国初中阶段信奥选手、指导教师及算法入门学习者,用于赛前模拟训练、考点梳理与应试能力提升。文件共1个PDF,大小2.72MB…

2026/10/12 13:20:31 阅读更多 →
Ubuntu离线中文语音识别实战:Vosk部署与调优指南

Ubuntu离线中文语音识别实战:Vosk部署与调优指南

1. 为什么要在离线环境里折腾中文语音识别把语音识别跑在本地、断网也能用,这件事听起来像是"洁癖",但真正做过项目的人都知道,它解决的是很实在的问题。我最早接触这个需求,是在一个内网数据处理的项目里:现…

2026/10/12 13:20:31 阅读更多 →
Python机器学习实战:从NumPy数据处理到客户流失预测全流程

Python机器学习实战:从NumPy数据处理到客户流失预测全流程

简介:面向Python机器学习初学者的教学配套资料包,内含《Python机器学习编程与实战》一书的源代码与实验数据,帮助读者从零基础起步,通过动手实操掌握数据处理、建模与评估的全流程。压缩包共77个文件,约82.8MB&#xf…

2026/10/12 13:20:31 阅读更多 →
Scrapy日志系统实战:配置、优化与常见问题排查

Scrapy日志系统实战:配置、优化与常见问题排查

1. 为什么日志系统是爬虫项目的生命线做爬虫的朋友大概都有过这种经历:脚本跑了一整夜,早上起来一看,数据没入库,控制台一片空白,或者满屏都是红色的报错信息,但你根本不知道是哪一步出了问题。更让人头疼的…

2026/10/12 13:19:27 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →