【算法】字母异位词分组

题目:字母异位词分组

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

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

示例 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] 仅包含小写字母

题目分析:当我看到这道题的时候,这道题考查的就是找出所有的包含相同字母的单词(单词中的字母顺序是不固定的)。我有以下几个疑惑点:

第一、怎么进行比对
举个例子,比如
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]

那怎么拿"eat"去和strs数组中的其他值进行比对,有没有统一的比对标准,我原先想的是先比较字符串的长度,然后再比较每个字母是否相同,这样复杂度就一下子上去了。
最后思考的得到的解决方案是:通过先把字符串转成数组,再进行排序,然后再转成字符串。如果是字符包含的字母相同,则最后得到转化之后的字符串都是一样的,接着再进行比较,这样复杂度降低了,逻辑更清晰了。

第二、怎么保存相同的字母的字符串
我原先的构想是先声明一个空数组a,来存储相同的字母的字符串,然后再声明一个大的数组A来存储这个a(会有很多个这样的a数组)。这样的话,复杂度一下就上去了。
这一步思考的得到的解决方案是使用map来进行存储,使用转化后得到的字符串当做map的key值,value刚开始是一个数组(这个数组的初始化值就是刚刚遍历到的那个值)。这样就解决了怎么保存相同的字母的字符串的问题;

那通过解决上面这两个疑问点,也相当于解答出了这道题;
具体代码如下:

/*** @param {string[]} strs* @return {string[][]}*/
var groupAnagrams = function(strs) {let strsMap = new Map()for (let str of strs) {// 字符串先转化成数组,然后对数组进行排序,排序之后,再转化为字符串。(相同字母组成的字符串最后转为的字符串都是一样的值)let switchStr = str.split('').sort().join('');// 这里注意split和join的用法,传入分割的字符// 如果map中包含转化后的字符串,则把这个str push到数组中if (strsMap.has(switchStr)) {strsMap.get(switchStr).push(str);} else {// 如果map中不包含转化后的字符串,则用map.set设置key,value,key值为转化之后的值,value为初始化的数组strsMap.set(switchStr, [str])}}// 输出最后得到的数组值return Array.from(strsMap.values())
};

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

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

相关文章

从零开始搭建spring boot多模块项目

一、搭建父级模块 1、打开idea,选择file–new–project 2、选择Spring Initializr,选择相关java版本,点击“Next” 3、填写父级模块信息 选择/填写group、artifact、type、language、packaging(后面需要修改)、java version(后面需要修改成和第2步中版本一致)。点击“…

【0300】Postgres内核动态哈希表实现机制(1)

相关文章&#xff1a; 【0299】Postgres内核之哈希表&#xff08;Hash Tables&#xff09; 0 概述 在【0299】Postgres内核之哈希表&#xff08;Hash Tables&#xff09;一文中&#xff0c;讲解了哈希表的作用、实现、优缺点等特性。本文开始&#xff0c;将详细分析Postgres内…

MySQL之应用层优化(三)

应用层优化 应用层缓存 2.本地共享内存缓存 这种缓存一般是中等大小(几个GB)&#xff0c;快速&#xff0c;难以在多台机器间同步。它们对小型的半静态位数据比较合适。例如每个州的城市列表&#xff0c;分片数据存储的分区函数(映射表)&#xff0c;或者使用存活时间(TTL)策略…

记录一次Chrome浏览器自动排序ajax请求的JSON数据问题

文章目录 1.前言2. 为什么会这样&#xff1f;3.如何解决&#xff1f; 1.前言 作者作为新人入职的第一天&#xff0c;mentor给了一个维护公司运营平台的小需求&#xff0c;具体需求是根据运营平台的某个管理模块所展示记录的某些字段对展示记录做排序。 第一步&#xff1a; myb…

工业触摸一体机优化MES应用开发流程

工业触摸一体机在现代工业生产中扮演着至关重要的角色&#xff0c;它集成了智能触摸屏和工业计算机的功能&#xff0c;广泛应用于各种生产场景中。而制造执行系统&#xff08;MES&#xff09;作为工业生产管理的重要工具&#xff0c;对于提高生产效率、降低成本、优化资源利用具…

力扣hot100-普通数组

文章目录 题目&#xff1a;最大子数组和方法1 动态规划方法2 题目&#xff1a;合并区间题解 题目&#xff1a;最大子数组和 原题链接&#xff1a;最大子数组和 方法1 动态规划 public class T53 {//动态规划public static int maxSubArray(int[] nums) {if (nums.length 0…

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段&#xff0c;主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识&#xff0c;输出.i/.ii预处理文件。 宏替换&#xff0c;…

【UML用户指南】-26-对高级行为建模-状态图

目录 1、概念 2、组成结构 3、一般用法 4、常用建模技术 4.1、对反应型对象建模 一个状态图显示了一个状态机。在为对象的生命期建模中 活动图展示的是跨过不同的对象从活动到活动的控制流 状态图展示的是单个对象内从状态到状态的控制流。 在UML中&#xff0c;用状态图…

tcpdump命令详解及使用实例

1、抓所有网卡数据包&#xff0c;保存到指定路径 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump简介 tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来去掉无用的信…

【Python】已解决:SyntaxError: positional argument follows keyword argument

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError: positional argument follows keyword argument 一、分析问题背景 在Python编程中&#xff0c;当我们在调用函数时混合使用位置参数&#xff08;p…

RabbitMQ进阶篇

文章目录 发送者的可靠性生产者重试机制实现生产者确认 MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue(可配置~)控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 消费者的可靠性消费者确认机制失败重试机制失败处理策略 业务幂等性唯一消息ID业…

西部智慧健身小程序+华为运动健康服务

1、 应用介绍 西部智慧健身小程序为用户提供一站式全流程科学健身综合服务。用户通过登录微信小程序&#xff0c;可享用健康筛查、运动风险评估、体质检测评估、运动处方推送、个人运动数据监控与评估等公益服务。 2、 体验介绍西部智慧健身小程序华为运动健康服务核心体验如…

idea xml ctrl+/ 注释格式不对齐

处理前 处理后 解决办法 取消这两个勾选

核方法总结(三)———核主成分(kernel PCA)学习笔记

一、核主成分 1.1 和PCA的区别 PCA &#xff08;主成分分析&#xff09;对应一个线性高斯模型&#xff08;参考书的第二章&#xff09;&#xff0c;其基本假设是数据由一个符合正态分布的隐变量通过一个线性映射得到&#xff0c;因此可很好描述符合高斯分布的数据。然而在很多实…

ViewBinding的使用(因为kotlin-android-extensions插件的淘汰)

书籍&#xff1a; 《第一行代码 Android》第三版 开发环境&#xff1a; Android Studio Jellyfish | 2023.3.1 问题&#xff1a; 3.2.4在Activity中使用Toast章节中使用到了kotlin-android-extensions插件,但是该插件已经淘汰,根据网上了解,目前使用了新的技术VewBinding替…

UE4_材质_材质节点_DepthFade

一、DepthFade参数 DepthFade&#xff08;深度消退&#xff09;表达式用来隐藏半透明对象与不透明对象相交时出现的不美观接缝。 项目说明属性消退距离&#xff08;Fade Distance&#xff09;这是应该发生消退的全局空间距离。未连接 FadeDistance&#xff08;FadeDistance&a…

【数据分析“三剑客”】—— Pandas

Pandas Pandas 是基于NumPy的一种工具&#xff0c;该工具是为解决数据分析任务而创建的, Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。Pandas与出色的 Jupyter工具包和其他库相结合&#xff0c;Python中用于进行数据分析的环境在性能、生产率和协作能力方面都是…

光照老化试验箱:材料耐久性的“时间加速器”

光照老化试验箱&#xff1a;材料耐久性的“时间加速器”概述 光照老化试验箱是一种模拟自然光照条件下材料老化过程的设备&#xff0c;广泛应用于材料科学领域的耐久性能评估。通过模拟日光中的紫外线、热辐射等环境因素&#xff0c;加速材料老化过程&#xff0c;以此来验证材…

redhawk:tech file与lefdef layer name不匹配问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 一些工艺厂商给的redhawk tech file是加密的&#xff0c;读完tech file再读lef/def会报错&#xff0c;根本不知道问题在哪&#xff0c;他们一般会搭配给一个layer map&#xff…

分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测

分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测 目录 分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测效果一览基本介绍程序设计参…