数据结构篇-05:哈希表解决字母异位词分组

本文对应力扣高频100 ——49、字母异位词分组


哈希表最大的特点就是它可以把搜索元素的时间复杂度降到O(1)。这一题就是要我们找到 “字母异位词” 并把它们放在一起。

“字母异位词”就是同一个单词中字母的不同组合形式。判断“字母异位词”有两个视角:1、所含字母数量和种类相等的两个字符串数组互为“字母异位词”,当我们将其排序后,互为异位词的两个字符串应该是相同的;2、字母出现次数相同的两个字符串数组互为“字母异位词”,我们把其中字母出现的次数记录下来,形成的数组应该是相同的。

方法一:以重新排序后的字符串作为哈希表的key

思想:所含字母数量和种类相等的两个字符串数组互为“字母异位词”,当我们将其排序后,互为异位词的两个字符串应该是相同的

public class Solution{public List<List<Integer>> groupAnagrams(String[] strs){//如果字符串strs为空,则返回一个空的数组if(strs == null || str.length == 0){return new ArrayList<>();}Map<String,List<Integer>> map = new HashMap<>();//遍历每一个元素for(String str : strs){//将strs中的元素从String类型转为char类型,便于排序char[] charStr = str.toCharArray();//将转为 字符数组 的元素进行排序Arrays.sort(charStr);//将排序后的字符数组转回String类型,用于哈希比较String sortedStr = new String(charStr);//如果哈希表中不包含当前元素,就将其添加到哈希表中if(!map.containsKey(sortedStr)){map.put(sortedStr,new ArrayList<>());}//相反的,如果哈希表中包含该元素,就将其添加到对应key值的value值中//在本题中,value值是一个数组map.get(sortedStr).add(str);}//返回最终数组return new ArrayList<>(map.values());}
}

 方法二:以字符出现次数作为哈希表的键

思想:字母出现次数相同的两个字符串数组互为“字母异位词”,我们把其中字母出现的次数记录下来,形成的数组应该是相同的。

比如 “abc” 和 “bac” 互为字母异位词,在这两个字符串中,“a”、“b”、“c”各出现一次

public class Solution{public List<List<Integer>> groupAnagrams(String[] strs){Map<String,List<String>> map = new HashMap<>();//遍历字符串数组中的每一个元素for(String str : strs){//定义一个count数组用于记录每个字母出现次数int[] count = new int[26];//遍历元素中的每一个字母,并将其记录到数组中for(char c : str.toCharArray()){count[c - 'a']++;}//将数组转为String类型,便于放入哈希表String key = Arrays.toString(count);//获取哈希表value值中的list数组List<String> list = map.getOrDefault(key,new ArrayList<>());//将原始元素str放入listlist.add(str);//将字母出现次数作为哈希表的key值,list作为value值map.put(key,list);}//最后返回哈希表的valuereturn new ArrayList<>(map.values());}
}

 

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

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

相关文章

全面认识DOS系统

目录 一、DOS系统的功能 1.执行命令和程序&#xff08;处理器管理&#xff09; 2.内存管理 3.设备管理 4.文件管理 5.作业管理 二、文件与目录 三、文件类型与属性 1.系统属性&#xff08;S&#xff09; 2.隐含属性&#xff08;H&#xff09; 3.只读属性&#xff08…

初谈类和对象

文章目录 前言类的引入类的定义类的两种定义方式成员命名规则 类的访问限定符及封装访问限定符面试题封装 类的作用域类的实例化类对象模型计算类对象的大小 this指针this指针特性 前言 C语言是面向过程的&#xff0c;关注点是过程&#xff1b;而C面向的是对象&#xff0c;关注…

mysql-FIND_IN_SET查询优化

优化前 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real_org_name,real_dept_id,real_dept_name, STATUS FROMsys_user WHEREis_del 0 AND find_in_set( lilong, login_user_account ) 优化后 SELECTuser_id,user_name,real_name,PASSWORD,real_org_id,real…

回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff0…

如何处理我们的文本数据成构建词表

我们拿到在拿到一堆语料数据&#xff0c;或者是在网络中爬取下来的文本数据如何处理成为模型能够训练的数据呢&#xff1f;这里有我们先经过停用词和按字分词的处理之后&#xff0c;得到的问答对文本数据&#xff0c;input_by_word.txt 和 target_by_word.txt 。其中&#xff0…

2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测

2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效…

Docker进阶篇-Docker网络

一、描述 1、docker不启动&#xff0c;默认网络情况 查看网卡情况使用&#xff0c;ifconfig或者ip addr ens33&#xff1a;本机网卡 lo&#xff1a;本机回环网络网卡 virbr0:在CentoS 7的安装过程中如果有选择相关虚拟化的的服务安装系统后&#xff0c;启动网卡时会发现 …

Web实战丨基于Django的简单网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于django的简单网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795604 Django简介 Django 是一个用 Python 编写的高…

游戏找不到d3dcompiler_43.dll怎么办?多种5种解决方法分享

在运行游戏的过程中&#xff0c;系统遇到了一个关键性的问题&#xff0c;即无法成功找到名为“d3dcompiler_43.dll”的动态链接库文件。这一特定的dll文件对于游戏的正常启动和图形渲染至关重要&#xff0c;它的缺失可能会导致游戏无法运行或者画面无法正确显示。通常情况下&am…

day07-CSS高级

01-定位 作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 left right top bottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置 显示模…

10秒搞定!隔壁奶奶都能搞定的幻兽帕鲁、雾锁王国开服指南

最近《幻兽帕鲁》和《雾锁王国》非常火热&#xff0c;玩过的小伙伴们都说非常上头&#xff01;有跟朋友对战需求的小伙伴们可以通过本文拥有一台高性价比的专用服务器&#xff0c;随时可以用来跟朋友一起玩游戏&#xff01; 敲重点&#xff01;&#xff01;&#xff01; 步骤…

2021-10-14 51蛋骗鸡1秒变动0-9按键控制并蜂鸣器响

缘由单片机程序设计与应用-Python-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk0; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,111,128,255,64};//0-9.消隐- unsigned char J…

【深度学习: 计算机视觉】如何改进计算机视觉数据集

【深度学习&#xff1a; 计算机视觉】如何改进计算机视觉数据集 训练模型并评估性能确定数据集需要改进的原因和位置收集或创建新的图像或视频数据重新训练机器学习模型并重新评估&#xff0c;直到达到所需的性能标准 机器学习算法需要大量数据集来训练、提高性能并生成组织所需…

基于SpringBoot+Vue的高校在线答疑管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

springwebflux高性能服务

场景&#xff1a; 分别使用springwebmvc 使用tomcat &#xff08;tomcat 9&#xff09;和springwebflux 做一个简单的接口 &#xff0c;该接口返回一个随机数 压测环境&#xff1a; 4C 8G ECS 使用tomcat 压测结果 Max 抖动的厉害 保持压测的参数不变 使用webflux 压测结果 …

Power Designer的使用 创建数据库表模型

几年前用过PowerDesigner&#xff0c;好几年没用&#xff0c;有点忘记了&#xff0c;在这里记个笔记&#xff0c;需要的时候翻一翻 PowerDesigner版本16.5 下面的例子是以MySQL数据库为准 生成C#实体类 一 安装 1.1 安装 不让放网盘链接&#xff0c;审核通不过。。。。 …

react 之 zustand

zustand可以说是redux的平替 官网地址&#xff1a;https://zustand-demo.pmnd.rs/ 1.安装 npm i zustand2.基础使用 // zustand import { create } from zustand// 1. 创建store // 语法容易出错 // 1. 函数参数必须返回一个对象 对象内部编写状态数据和方法 // 2. set是用来…

Maven高级知识——分模块开发、继承与聚合

目录 一、分模块设计与开发 1.1 不分模块的问题 1.2 分模块设计 二、 继承与聚合 2.1 继承 2.1.1 继承关系 2.1.2 版本锁定 2.1.2.1 场景 2.1.2.2 介绍 2.1.2.3 实现 2.1.2.4 属性配置 2.2 聚合 2.2.1 介绍 2.2.2 实现 2.3 继承与聚合对比 三、Maven打包方式&#xff08;jar、w…

应对手机数据丢失的5大安卓数据恢复软件

我们都去过那里。您的手机上的数据丢失了&#xff0c;现在无法恢复。这尤其令人恐惧&#xff0c;因为我们的手机上都有如此多的信息。从图片、应用程序、个人信息&#xff0c;甚至是来自可能已不复存在的亲人的短信和语音邮件。这种情况确实发生了&#xff0c;而且也不仅仅是An…

Leetcode—382. 链表随机节点【中等】(水塘抽样法)

2024每日刷题&#xff08;一零九&#xff09; Leetcode—382. 链表随机节点 算法思想 我们可以在初始化时&#xff0c;用一个数组记录链表中的所有元素&#xff0c;这样随机选择链表的一个节点&#xff0c;就变成在数组中随机选择一个元素 实现代码 /*** Definition for si…