news 2026/5/13 3:31:32

哈希-03-字母异位词分组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
哈希-03-字母异位词分组

文章目录

  • 1. 题目描述
  • 2. 思路及代码
    • 错误示例1:
    • 错误示例2:
    • 正确示例:
  • 总结

1. 题目描述

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

示例 1:

输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 “bat”。
  • 字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 “ate” ,“eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [“”]
输出: [[“”]]

示例 3:

输入: strs = [“a”]
输出: [[“a”]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母

2. 思路及代码

错误示例1:

存在的问题:无法处理多个相同字符的情况,对空字符也处理不了。

publicList<List<String>>groupAnagrams(String[]strs){Set<Set<Character>>sets=newHashSet<>();for(Stringstr:strs){char[]charArray=str.toCharArray();Set<Character>set=newHashSet<>();for(charc:charArray){set.add(c);}sets.add(set);}List<List<String>>lists=newArrayList<>();for(Set<Character>set:sets){List<String>list=newArrayList<>();for(Stringstr:strs){char[]charArray=str.toCharArray();intcount=0;for(charc:charArray){if(set.contains(c)){count++;}}if(count==set.size()){list.add(str);}}lists.add(list);}returnlists;}

错误示例2:

存在的问题:int[]没有重写equals方法,HashSet无法去重!!!会导致出现重复的分组

publicList<List<String>>groupAnagrams2(String[]strs){HashSet<int[]>sets=newHashSet<>();for(Stringstr:strs){int[]ints=newint[26];char[]charArray=str.toCharArray();for(charc:charArray){intascii=c-'a';ints[ascii]+=1;}sets.add(ints);}List<List<String>>lists=newArrayList<>();for(int[]set:sets){List<String>list=newArrayList<>();for(Stringstr:strs){int[]ints=newint[26];char[]charArray=str.toCharArray();for(charc:charArray){intascii=c-'a';ints[ascii]+=1;}if(set.equals(ints)){list.add(str);}}lists.add(list);}returnlists;}

正确示例:

  • 使用HashMap + List/Set处理一对多关系。
publicList<List<String>>groupAnagrams3(String[]strs){Map<String,List<String>>map=newHashMap<>();for(Stringstr:strs){char[]charArray=str.toCharArray();Arrays.sort(charArray);//如果key不存在就创建新List,然后添加元素map.computeIfAbsent(String.valueOf(charArray),k->newArrayList<>()).add(str);}Collection<List<String>>values=map.values();returnnewArrayList<>(values);}

总结

  1. HashSet无法对没有重写equals方法的数据结构进行去重。
  2. 异位词所涉及的字符不变,只是不同的组合,可以用一对多的数据结构来存储。

以上为个人学习分享,如有问题,欢迎指出:)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 18:21:25

MySQL 审计级别配置指南

目录标题 MySQL 审计级别配置指南一、当前环境审计配置1.1 已安装的审计插件1.2 当前审计参数 二、Percona Audit Plugin 审计级别详解Policy 对照表 三、各级别详细说明Level 0: NONE&#xff08;关闭审计&#xff09;Level 1: LOGINS&#xff08;基础审计&#xff09;Level 2…

作者头像 李华
网站建设 2026/5/11 18:21:27

测试团队的技术规划与技术债管理

质量防线的双重挑战 在敏捷与DevOps主流化的今天&#xff0c;软件测试团队的角色已从传统的“质量守门员”演变为“质量赋能者”。这一转变意味着测试工作不再仅仅是发现缺陷&#xff0c;更需要深度融入开发流程&#xff0c;并通过技术手段提升效率与可靠性。然而&#xff0c;…

作者头像 李华
网站建设 2026/5/11 19:25:02

从用户体验(UX)设计中学习测试用例设计灵感

打破专业壁垒&#xff0c;从同理心出发 在追求软件质量的旅程中&#xff0c;测试与设计的角色并非两条平行线。用户体验&#xff08;UX&#xff09;设计的核心是“理解人”&#xff0c;致力于创造高效、愉悦且满足需求的交互过程&#xff1b;而软件测试的使命是“保障质量”&a…

作者头像 李华
网站建设 2026/5/11 18:10:53

降重 + 去 AIGC 双 buff 拉满!虎贲等考 AI:学术合规的智能破局方案

论文查重率 “超标预警”&#xff1f;AI 生成痕迹被精准标记&#xff1f;辛苦创作的稿件因 “机器感过重” 被打回重改&#xff1f;在学术规范日趋严格的当下&#xff0c;“降重” 与 “清除 AIGC 痕迹” 成为学术创作的两大核心痛点。普通工具要么只做表面文字替换&#xff0c…

作者头像 李华
网站建设 2026/5/11 19:22:25

在AI时代,测试工程师的核心价值和能力模型发生了哪些变化?

在AI时代,测试工程师的角色正从“质量验证者”向“风险预测与价值守护者” 深刻演进。AI不仅改变了我们测试的产品,更重塑了测试工作本身。其核心价值与能力模型的变迁,可以用以下框架清晰呈现: 一、 核心价值的升维:从“找Bug”到“防风险、提体验、护伦理” 价值重心转…

作者头像 李华
网站建设 2026/5/4 20:29:27

三大厂太贵了!我真心希望薰风能成为羽毛球第四大厂

最近这段时间,使用了好几把薰风的拍子,不论是狂蟒、修罗亦或是厚羿,都让我觉得十分的好用,再加上球鞋球服的使用,突然发觉薰风已经逐渐包围了我的生活。那么就简单的和大家分享一下目前我对薰风的一些看法,我认为薰风是一个锐意进取不断上升的好品牌,我希望它能够有更高的高度,…

作者头像 李华