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

哈希-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. 异位词所涉及的字符不变,只是不同的组合,可以用一对多的数据结构来存储。

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

http://www.jsqmd.com/news/135024/

相关文章:

  • 2025 年全国景观灯厂家十大最新推荐,品质之选照亮城市与庭院 - 深度智识库
  • 2025年市面上诚信的空调机组厂家哪家好,高大空间供暖设备/离心式风幕机/高大空间壁挂式供暖设备,空调机组品牌联系电话 - 品牌推荐师
  • 教育博主实测:2025年高性价比AI智能体开发服务推荐指南 - 品牌测评鉴赏家
  • PyTorch MNIST全连接分类器完整流程
  • 2025年市面上专业的暖风机工厂联系电话,高大空间门侧式供暖设备/吊顶空调机组/空气处理单元,暖风机厂家电话 - 品牌推荐师
  • 深入解析:基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
  • 从用户故事到测试用例:一张思维导图搞定需求分析与用例设计
  • 测试团队的技术规划与技术债管理
  • 2025年市面上专业的风幕机厂家联系电话,表冷换热器/高大空间循环空气制热机组/贯流式风幕机,风幕机工厂联系电话 - 品牌推荐师
  • 一些Android平台的早期J2ME实现方案的情况
  • 毕业论文降ai救命指南:知网、维普AIGC检测率高?5款降ai率工具亲测,轻松降到合格线!
  • 一些Android平台的早期J2ME实现方案的情况
  • 测试覆盖率99%≠高质量:我们到底该追求什么样的覆盖率?
  • 2025最新!10个AI论文平台测评:研究生写论文必备神器
  • 2025年12月小学生兴趣班挑选秘籍,家长必看! - 品牌测评鉴赏家
  • 揭秘沃尔玛购物卡回收猫腻,教你安全避坑 - 京顺回收
  • 国内混合机五大头部厂商实力比拼!探寻优质搅拌机设备的技术突破与服务特色 - 速递信息
  • 【珍藏必看】一张图拆解AI Agent:从Prompt到Action的五大核心架构
  • 2025年终母线桥厂家权威推荐:母线/母线槽全品类产品资讯速递 - 深度智识库
  • maven知识回顾
  • 西门子224XP恒压供水系统程序:触摸屏版昆仑通泰与西门子版本、多泵调度与保护功能
  • 物联网(IoT)测试的挑战:硬件、软件与网络的结合
  • ‌从“找Bug的”到“质量倡导者”:敏捷时代测试工程师的价值重塑
  • 2025最新!自考必看10个AI论文平台测评,写论文不再愁
  • 迪士尼如何让雪宝“活“过来?一个动画角色走进现实世界的奇妙旅程
  • 主成分分析 PCA(二)-- 高维 PCA
  • 分布式数据库水平扩展与高可用架构在互联网大规模业务系统优化实践经验分享总结 - 教程
  • 游戏测试与普通软件测试的异同点
  • vscode的缓存文件夹
  • 东北酱香型白酒推荐,本土酱香品质突围 - 黑马榜单