当前位置: 首页 > 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.gsyq.cn/news/148280.html

相关文章:

  • 教育博主实测:2025年高性价比AI智能体开发服务推荐指南 - 品牌测评鉴赏家
  • PyTorch MNIST全连接分类器完整流程
  • 深入解析:基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
  • 一些Android平台的早期J2ME实现方案的情况
  • 揭秘沃尔玛购物卡回收猫腻,教你安全避坑 - 京顺回收
  • 2025最新!10个AI论文平台测评:研究生写论文必备神器
  • 国内混合机五大头部厂商实力比拼!探寻优质搅拌机设备的技术突破与服务特色 - 速递信息
  • 2025年终母线桥厂家权威推荐:母线/母线槽全品类产品资讯速递 - 深度智识库
  • 分布式数据库水平扩展与高可用架构在互联网大规模业务系统优化实践经验分享总结 - 教程
  • 主成分分析 PCA(二)-- 高维 PCA
  • 2025最新!自考必看10个AI论文平台测评,写论文不再愁
  • 游戏测试与普通软件测试的异同点
  • 探索式测试的“道”与“术”:如何系统性地成为Bug狩猎高手?
  • 在戴尔Precision Max Slim本地部署KAG,把AI 问答系统卷出天际
  • 从用户体验(UX)设计中学习测试用例设计灵感
  • 【路径规划】混合人工蜂群ABC和粒子群优算法PSO机器人路径规划【含Matlab源码 14774期】
  • MySQL 审计级别配置指南
  • 测试工程师如何培养“老板思维”?
  • 训练模型用GCP,推理服务放阿里云?聊聊AIGC时代的多云自由
  • 2025年12月母线槽优质厂家推荐:密集型、耐火型、封闭式、空气型母线槽品质一览 - 深度智识库
  • 【RRT三维路径规划】基于matlab带信息的RRT算法无人机路径规划【含Matlab源码 14776期】
  • 2025托福培训哪家强?这5家高口碑机构帮你精准提分(附选课攻略) - 品牌测评鉴赏家
  • 2025年南京地区留学中介服务实力权威排名榜单揭晓 - 留学品牌推荐官
  • CF2078虚拟赛总结 - Link
  • 【git 教程-番外1】Conventional Commits——commit message 的社区规范
  • 国产开源神器 MonkeyCode:企业级 AI 编程助手,私有化部署超省心
  • 2025年上海留学中介口碑榜TOP5揭秘:哪家机构获学子力荐 - 留学品牌推荐官
  • 揭秘Open-AutoGLM部署难题:5步实现AI手机本地大模型高效运行
  • 2025年末Deepseek优化排名甄选:深耕GEO优化领域的口碑服务商解析 - 品牌推荐排行榜
  • 2025年上海留学中介全解析,权威榜单揭晓综合实力机构 - 留学品牌推荐官