LeetCode算法题:49. 字母异位词分组(Java)

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

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

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

我的解题思路:
自定义一个hash方法,将每个字符串进行hash计算,将相同hash值的字符串存放在一个list当中。
我定义的hash方法:每个字符的转为int值,然后相乘,乘积对他们的和+1取余数。

出现错误:
在这里插入图片描述
原因:上述hash方法存在碰撞,没有有效处理碰撞的情况。
试了好几次自定义的hash方法,一直都是存在碰撞的情况。
不死磕,直接看官方题解:
官方题解1:
方法一:排序
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<String, List<String>>();for (String str : strs) {char[] array = str.toCharArray();Arrays.sort(array);String key = new String(array);List<String> list = map.getOrDefault(key, new ArrayList<String>());list.add(str);map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法2:
方法二:计数
由于互为字母异位词的两个字符串包含的字母相同,因此两个字符串中的相同字母出现的次数一定是相同的,故可以将每个字母出现的次数使用字符串表示,作为哈希表的键。

由于字符串只包含小写字母,因此对于每个字符串,可以使用长度为 26的数组记录每个字母出现的次数。需要注意的是,在使用数组作为哈希表的键时,不同语言的支持程度不同,因此不同语言的实现方式也不同。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap<String, List<String>>();for (String str : strs) {int[] counts = new int[26];int length = str.length();for (int i = 0; i < length; i++) {counts[str.charAt(i) - 'a']++;}// 将每个出现次数大于 0 的字母和出现次数按顺序拼接成字符串,作为哈希表的键StringBuffer sb = new StringBuffer();for (int i = 0; i < 26; i++) {if (counts[i] != 0) {sb.append((char) ('a' + i));sb.append(counts[i]);}}String key = sb.toString();List<String> list = map.getOrDefault(key, new ArrayList<String>());list.add(str);map.put(key, list);}return new ArrayList<List<String>>(map.values());}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/group-anagrams/solutions/520469/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

自我总结:
对于hash类题目,还是尽量不要自己创建hash方法去计算hash值,你以为的独一无二的hash方法,总能被测试用力暴捶。尽量从题目描述中去找到一些独特之处作为hashmap的键。例如这一次使用排序后的字符串,或者每个字符出现的次数都可以作为键。

如何在函数方法上新建对象?
直接和新建对象一样的方法:new
在这里插入图片描述

HashMap的contain方法有哪些。
containsKey(),containsValue()

如何收集HashMap的所有value值作为一个集合返回。

new ArrayList<T>(map.values()) // T与map的value类型要统一

HashMap根据键取值的方法.

map.get(key)

List list = new List();错误的定义集合方法,因为List是一个接口,不能有实现类。

List集合修改某个位置的值

list.set(index,newValue);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

答辩PPT自述稿如何准备?笔灵AI答辩PPT,自动生成演讲稿

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

试试这四个AI论文工具和降重技术,低成本高回报

在科研领域&#xff0c;AI写作工具如同新一代的科研利器&#xff0c;它们能够极大提高文献查阅、思路整理和表达优化的效率&#xff0c;本质上促进了科研工作的进步。AI写作工具不仅快速获取并整理海量信息&#xff0c;还帮助我们精确提炼中心思想&#xff0c;显著提升论文写作…

研发管理-选择研发管理系统-研发管理系统哪个好

选择研发管理系统-研发管理系统哪个好 选择研发管理系统时&#xff0c;并没有一个绝对的“最好”的系统&#xff0c;因为每个企业的需求和情况都是独特的。然而&#xff0c;我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统&#xff0c;供您参考&#xff1a; 1、彩…

MathType7.9中文官方最新破解汉化版无需许可证激活码

MathType是一个功能强大的数学公式编辑器&#xff0c;它能够帮助用户轻松地创建、编辑和排版各种数学公式。无论是学生、教师还是科研人员&#xff0c;都可以从MathType的丰富功能中受益。本文将为您详细介绍MathType的主要功能和使用方法&#xff0c;帮助您更好地利用这个工具…

web网页录音(recorder.js)并上传后端语音转文字(Vosk)

我是一个后端开发人员&#xff0c;现在都快进化成全栈了。操了&#xff0c;是谁有好的项目让我跳跳槽&#xff0c;转转行吧 写在前面&#xff0c;很重要 这是官方文档的说明 翻译如下&#xff1a; 我们有两种型号-大型号和小型号&#xff0c;小型号非常适合在移动应用程序上执…

远程服务器AutoDL登录/配环境/部署运行大模型方法

1. AutoDL autodl平台&#xff0c;是一个功能强大的本地大语言模型LLM运行专家,为用户提供了简单高效的方式来运行大型语言模型.通过优化设置和配置细节。 地址&#xff1a;AutoDL官方地址 2. 登录远程服务器方式 登录远程服务器的方式和工具有很多种 2.1 方法一 用AutoDL…

应用层(上篇)

应用层 应用层协议原理 网络应用程序体系解构 应用程序体系结构: 由应用程序研发者设计规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时&#xff0c;应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等…

24.5.12(23广东,19陕西)(字典树)

星期一&#xff1a; dp题单 区间dp第三题 二叉搜索树 cf传送门 思路&#xff1a;dp【i】【j】【0/1】表示区间 i到 j&#xff0c;以 i / j为根节点能否形成一棵二叉搜索树 因为题目要求组成二叉搜索树&#xff0c;若 i 到 j 的节点为一颗完整的子…

等保2.0的全面解读与实施策略

《网络安全等级保护基本要求》&#xff08;等保2.0&#xff09;是中华人民共和国国家安全部于2019年6月发布的网络安全等级保护标准。该标准规定了我国关键信息基础设施的网络安全等级保护要求和评估标准&#xff0c;对于保障我国网络安全具有重要的意义。下面是对等保2.0的全面…

Scratch四级:第09讲 搜索算法

第09讲 搜索算法 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 常考的搜索算法项目制作:“小猫钓鱼”项目制作:“统计身高”项目制作:“找出出现次数最多的数字”搜索算法 搜索算法常用于列表的题目中,包括: (1)…

LabVIEW开发RS422通信

LabVIEW开发RS422通信 项目围绕LabVIEW软件开发的程序在RS422通信技术检测方面的应用进行展开&#xff0c;通过软件编程将上位计算机虚拟化为检测设备&#xff0c;控制其通信端口与被测产品进行RS422通信&#xff0c;以此检验产品的性能优劣。该虚拟检测仪器在实际测试中表现出…

c++红黑树的模拟实现

目录 1. 红黑树的概念 ​编辑 2. 红黑树的性质 3. 红黑树的模拟实现 3.1 红黑树节点的定义 3.2 红黑树的插入 旋转代码 插入主逻辑代码 验证是否平衡 4. 红黑树与AVL树的比较 1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一…

嵌入式中STM32上模拟启动Linux自动初始化

Linux中有很多编程思想可以学习,很多大佬把这些思想、机制运用到单片机的编程上。 下文,在STM32上模拟Linux kernel自动初始化流程。 通常我们写程序都是按照这个套路,一个函数一个函数按照顺序逻辑一个一个的执行下去。 如果逻辑非常复杂,涉及的模块比较多,那么这种顺…

Quests system for Unity

一个简单而灵活的任务系统将帮助你实现所有的想法,而不需要事件和逻辑中的一堆额外代码! 我的资产是一个用于执行任务的独立系统。 特征: 任务逻辑不需要继承MonoBehaviour。 在一行中完成所需任务的激活/进度/完成。 易于理解的界面,包含项目中所有任务的列表。 不需要连接…

解锁!智能代码助手 Baidu Comate 硬核能力

近日&#xff0c;在全球软件开发大会上暨智能软件开发生态展上&#xff0c;来自 Baidu Comate 的资深研发工程师分享了精彩的专题演讲&#xff0c;小编整理了演讲精华&#xff0c;和大家一起玩转“大模型软件研发”。 今天带来——吴玮琦《智能代码助手 Baidu Comate 的核心能…

【Python时序预测系列】灰狼算法(GWO)优化LSTM实现单变量时间序列预测(案例+源码)

这是我的第279篇原创文章。 一、引言 灰狼算法&#xff08;GWO&#xff09;是一种新型的优化算法&#xff0c;灵感来源于灰狼群体中的社会行为。在灰狼算法中&#xff0c;每只灰狼都有自己的位置和适应度值&#xff0c;通过模拟灰狼群体的行为来搜索最优解。将灰狼算法应用于优…

支持不同业务模式与安全要求的跨网传输解决方案,了解一下

对于科技研发型企业来说&#xff0c;最值钱的是研发代码这类数据资产。因此很多企业会想将这些数据“困”在内部&#xff0c;防止数据泄露。最常见的做法是通过防火墙、DMZ区、双网卡主机、虚拟机、网闸/光闸等隔离方式&#xff0c;将网络划分为企业内外网&#xff0c;较为常见…

职校智慧校园现状及问题解决

近年来&#xff0c;智慧校园已经可以满足学校日常办公的需要&#xff0c;但是还是存在缺乏整体规划、缺乏统一技术标准、原有应用陈旧、多重身份和密码体系、业务系统的开发和维护模式不统一、现有应用重管理轻服务现象严重、数据资产利用不足等问题。 职校智慧校园现状及问题分…

Redis详解(二)

事务 什么是事务&#xff1f; 事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作&#xff1a;事务中的命令要么全部被执行&#xff0c;要么全部都…

怎么批量下载视频?DY视频爬虫在线提取采集工具

短视频批量下载工具&#xff0c;具有多种模块和功能&#xff0c;方便用户快速批量下载短视频。该软件的详细介绍&#xff1a; 功能模块介绍&#xff1a; 一. 搜索词批量搜索下载 视频关键词添加&#xff1a;支持添加多个视频关键词Q530269148进行全平台视频搜索。历史去重&a…