您现在的位置是:首页 >技术杂谈 >【LeetCode Hot100】 字母异位词分组[特殊字符]哈希表+排序,Java实现!保姆级图文拆解网站首页技术杂谈
【LeetCode Hot100】 字母异位词分组[特殊字符]哈希表+排序,Java实现!保姆级图文拆解
简介【LeetCode Hot100】 字母异位词分组[特殊字符]哈希表+排序,Java实现!保姆级图文拆解
💻 [LeetCode Hot100] 字母异位词分组🔥哈希表+排序,Java实现!保姆级图文拆解
✏️本文对应题目链接:字母异位词分组
📌 题目描述
给你一个字符串数组 strs,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词:由重新排列后相同的字母组成的字符串(例如 “eat” 和 “tea”)。
示例:
输入:strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:[["bat"],["nat","tan"],["ate","eat","tea"]]
� 解题思路(图文分解)
❗ 核心难点
如何快速判断多个字符串是否为字母异位词?
哈希表+排序法(黄金思路)✨
关键步骤:
- 创建哈希表:
key为排序后的字符串,value为原始字符串列表 - 遍历每个字符串:排序后作为哈希表的键
- 分组存储:将未排序的原始字符串存入对应键的列表中
动态过程图解:
输入 "eat" → 排序后 "aet" → 存入哈希表 {"aet": ["eat"]}
输入 "tea" → 排序后 "aet" → 追加到列表 → {"aet": ["eat","tea"]}
...最终合并所有值即为答案
🚀 代码实现
import java.util.*;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
// 创建哈希表,key为排序后的字符串,value为原始字符串列表
Map<String, List<String>> map = new HashMap<>();
// 遍历每个字符串
for (String s : strs) {
// 将字符串转换为字符数组并排序
char[] charArray = s.toCharArray();
Arrays.sort(charArray);
// 将排序后的字符数组转换为字符串作为key
String key = new String(charArray);
// 如果key不存在,则创建一个新的列表
if (!map.containsKey(key)) {
map.put(key, new ArrayList<>());
}
// 将原始字符串添加到对应的列表中
map.get(key).add(s);
}
// 返回哈希表中所有值(即分组后的列表)
return new ArrayList<>(map.values());
}
}
💡 复杂度分析
- 时间复杂度:O(nklogk)
n为字符串数量,k为字符串最大长度(排序每个字符串需O(klogk))
- 空间复杂度:O(nk) → 存储所有字符串
🌟 总结要点
✅ 哈希表核心作用:快速定位同类异位词分组
✅ 排序标准化:将乱序字符串转换为唯一标识
✅ 适用场景:需要按特征分类的题目(如本题、DNA序列分组)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结