news 2026/5/1 8:40:41

哈希-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/4/30 14:05:55

2025最新!10个AI论文平台测评:研究生写论文必备神器

2025最新&#xff01;10个AI论文平台测评&#xff1a;研究生写论文必备神器 2025年AI论文平台测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI在学术写作中的应用愈发广泛。然而&#xff0c;面对市场上琳琅满目的AI论文平台&#xff0c;…

作者头像 李华
网站建设 2026/4/27 19:00:08

游戏测试与普通软件测试的异同点

当测试遇见“第九艺术” 在数字化浪潮席卷全球的今天&#xff0c;软件测试作为保障产品质量的核心环节&#xff0c;其方法论与实践已日臻成熟。然而&#xff0c;随着游戏产业——这门被誉为“第九艺术”的领域——的爆炸式增长&#xff0c;衍生出的“游戏测试”岗位&#xff0…

作者头像 李华
网站建设 2026/5/1 5:48:31

怎么开展工业智能体研发以实现制造自主化转型?

在新一轮全球制造业变革中&#xff0c;智能体研发正成为推动工业智能化从“自动化”向“自主化”跃迁的核心力量。不同于传统依赖固定规则的控制系统&#xff0c;工业智能体&#xff08;Industrial AI Agent&#xff09;通过深度融合工业机理与前沿人工智能技术&#xff0c;实现…

作者头像 李华
网站建设 2026/5/1 6:49:05

python物流仓储进销存信息运输管理系统_ho5g5_pycharm django vue flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发项目效果实现截图 同行可拿货,招校园代理 python物流仓储进销存信息运输管理系统_ho5g5_pycharm django…

作者头像 李华
网站建设 2026/5/1 5:43:22

课程论文不用熬!虎贲等考 AI:1 篇高质量论文的智能速成指南

临近期末&#xff0c;课程论文扎堆袭来&#xff1a;专业跨度大不知如何切入、文献搜集半天没头绪、数据支撑不足论证薄弱、查重率超标反复修改…… 这些难题让无数学生陷入 “熬夜赶稿 焦虑内耗” 的循环。虎贲等考 AI&#xff08;官网&#xff1a;https://www.aihbdk.com/&am…

作者头像 李华