LeetCode Hot100 C++ 哈希 49.字母异位词分组

在这里插入图片描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 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表的key。

对于strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],怎么排序的?

遍历每个字符串,对每个字符串进行排序:

对于 “eat”,排序后得到 “aet”
对于 “tea”,排序后得到 “aet”
对于 “tan”,排序后得到 “ant”
对于 “ate”,排序后得到 “aet”
对于 “nat”,排序后得到 “ant”
对于 “bat”,排序后得到 “abt”

将排序后的字符串作为键,将原始字符串进行分组:

键 “aet” 对应的字母异位词组为:[“eat”, “tea”, “ate”]
键 “ant” 对应的字母异位词组为:[“tan”, “nat”]
键 “abt” 对应的字母异位词组为:[“bat”]
在这里插入图片描述

代码:

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> res;unordered_map<string, vector<string>> u_mapRes;for (auto& str : strs) {//对副本进行排序string key(str);sort(key.begin(), key.end());//存到hash表中u_mapRes[key].push_back(str);}for (auto& a : u_mapRes) {res.push_back(a.second);}return res;}
};

PS:
GPT4O逐行解析:

1. 函数定义
class Solution: 定义一个名为 Solution 的类。
public:: public 访问修饰符,表示后续成员可以在类外部访问。
vector<vector<string>> groupAnagrams(vector<string>& strs): 定义 groupAnagrams 函数,它是 Solution 类的一个成员函数。
返回值类型是 vector<vector<string>>,即一个二维字符串数组。
参数 vector<string>& strs 是一个引用类型的字符串数组,代表输入的字符串集合。2. 初始化变量
vector<vector<string>> res: 定义一个二维字符串数组 res,用于存储最终的分组结果。
unordered_map<string, vector<string>> u_mapRes: 定义一个哈希表 u_mapRes,它的键(string 类型)用于存储排序后的字符串,值(vector<string> 类型)用于存储对应的字母异位词列表。3. 遍历输入字符串数组
for (auto& str : strs): 使用范围 for 循环遍历输入字符串数组 strs,str 代表当前遍历到的字符串。
string key(str): 创建一个新的字符串 key,它是 str 的副本。此时,key 与 str 内容相同,但后续操作不会影响 str 本身。
sort(key.begin(), key.end()): 对 key 进行排序,目的是将 key 转换为一个字母顺序一致的字符串,作为字母异位词的唯一标识。例如,"eat" 在排序后变为 "aet"。
u_mapRes[key].push_back(str): 使用 key 作为哈希表 u_mapRes 的键,将原始字符串 str 添加到 u_mapRes[key] 的字符串向量中。这样,具有相同字符组成的字符串会被归入同一组。4. for (auto& pair : u_mapRes): 使用范围 for 循环遍历 unordered_map u_mapRes,pair 是每个键值对(key 和 value),其中 pair.first 是键,pair.second 是对应的字符串向量。
res.push_back(pair.second): 将 pair.second(即一个字母异位词组)添加到结果 res 中。5. 返回结果
return res: 返回最终的分组结果 res,这是一个包含多个字母异位词组的二维字符串数组。以 strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 为例,执行过程如下:
遍历字符串 strs,按排序后的字符串将字母异位词存入 unordered_map:
"eat" 排序后 "aet",键 "aet" 对应 ["eat"]
"tea" 排序后 "aet",键 "aet" 对应 ["eat", "tea"]
继续这个过程,unordered_map 最终会包含:
"aet" -> ["eat", "tea", "ate"]
"ant" -> ["tan", "nat"]
"abt" -> ["bat"]
遍历 unordered_map,将每组字母异位词添加到 res 中,得到最终结果

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2-99 基于matlab多尺度形态学提取眼前节组织

基于matlab多尺度形态学提取眼前节组织&#xff0c;通过应用不同尺度的结构元素进行边缘检测&#xff0c;再通过加权融合的思想来整合检测到的边缘&#xff0c;降低图像噪声的影响&#xff0c;提高边缘检测的精度。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&…

线程的状态及join()插队方法

一、线程的状态 线程整个生命周期中有6种状态&#xff0c;分别为 NEW 新建状态 、RUNNABLE 可运行状态、TERMINATED 终止状态、TIMED_WAITING计时等待状态、WAITING 等待状态、BLOCKED 阻塞状态 线程各个状态之间的转换&#xff1a; 在 JAVA 程序中&#xff0c;一个线程对象通过…

200Kg大载重多旋翼无人机应用前景详解

大载重多旋翼无人机是一类具备高载重能力和长航时特点的无人机系统&#xff0c;它们融合了多旋翼无人机的灵活性与大载重无人机的实用性&#xff0c;广泛应用于多个领域。 1. 航拍与影视制作 在航拍与影视制作领域&#xff0c;200Kg大载重多旋翼无人机凭借其出色的稳定性和载重…

维信诺三年半亏损近85亿:股价今年跌超四成,550亿大手笔投资8.6代

《港湾商业观察》施子夫 在显示面板领域知名度颇高的维信诺&#xff08;002387.SZ&#xff09;还是交出了持续亏损的半年报。从近些年财务数据上看&#xff0c;亏损似乎已经成为了公司甩不掉的包袱。 在盈利能力并不如预期的情况下&#xff0c;维信诺也对外释放要550亿扩产能…

图片切换示例【JavaScript】

在 JavaScript 中实现图片切换可以通过多种方法&#xff0c;下面是一个简单的示例&#xff0c;使用 HTML、CSS 和 JavaScript 来实现图片的切换效果。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta c…

单相电多相电

目录 1. 单相电 2. 多相电 3. 其他多相电系统 单相电和多相电是电力系统中常见的两种供电方式&#xff0c;主要区别在于电力传输的相数。以下分别介绍它们的基本概念、特征、以及应用场景。 1. 单相电 定义&#xff1a; 单相电指的是只有一根火线和一根零线的电力系统。这…

电玩店ps5倒计时软件试用版下载 佳易王电玩计时计费管理系统操作教程

一、前言 电玩店ps5倒计时软件试用版下载 佳易王电玩计时计费管理系统操作教程 佳易王电玩店计时计费软件&#xff0c;有两款&#xff0c;其中一款可显示倒计时剩余分钟数&#xff0c;另外一款是显示用了多长时间&#xff0c;都可以设置定时语音提醒。 二、显示倒计时软件图文…

python之装饰器、生成器

装饰器 什么是装饰器&#xff1f; 用来装饰其他函数&#xff0c;即为其他函数添加特定功能的函数。 装饰器的两个基本原则&#xff1a; 装饰器不能修改被装饰函数的源码 装饰器不能修改被装饰函数的调用方式

css禁止图片保存,CSS中的图片保存方法

“css中的图片”指的就是镶在CSS样式表中的图片。在我们用在浏览器保存网页时&#xff0c;很多时候&#xff0c;下载网页里的图片都下载不到&#xff0c;这样的话就会使网页非常不美观。所以&#xff0c;今天小编就给大家介绍集中保存方法。 以下是几种保存方法。 (一)使用网…

互联网产品经理在 AIGC 时代的升级攻略

在当今科技飞速发展的浪潮中&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;正以前所未有的速度改变着互联网的格局。对于互联网产品经理而言&#xff0c;这既是一个充满无限可能的机遇&#xff0c;也是需要积极应对的挑战。那么&#xff0c;在 AIGC 时代&#xff0…

Vulnhub:Cybero1

靶机下载地址 主机发现 扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.118 端口扫描 nmap 192.168.31.118 -A -p- -T4 开放端口&#xff1a;21(ftp)、22(ssh)、80(http)、8085(http)。 HTTP信息收集 80 访问http://192.168.3…

毫米波雷达预警功能 —— 倒车预警(RCTA)

文档声明&#xff1a; 以下资料均属于本人在学习过程中产出的学习笔记&#xff0c;如果错误或者遗漏之处&#xff0c;请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。 笔记资料仅供学习交流使用&#xff0c;转载请标明出处&#xff0c;谢谢配…

股指期货的持仓量指标如何分析?有哪些作用?

股指期货市的持仓量是一个极其重要的指标&#xff0c;它就像市场的“晴雨表”&#xff0c;能反映出投资者的信心、市场的热度以及潜在的趋势。下面&#xff0c;我们就用大白话的方式来详细解读一下股指期货持仓量指标的分析方法及其作用。 一、什么是股指期货持仓量&#xff1…

骨传导耳机哪款值得入手?分享五款高品质好口碑骨传导耳机~

在不经意间&#xff0c;耳机已深深嵌入我们的日常生活&#xff0c;无论是早晨的匆忙出门&#xff0c;还是日常通勤、工作忙碌&#xff0c;乃至夜晚的休憩时光&#xff0c;它都是我们的忠实伴侣。然而&#xff0c;关于长时间佩戴耳机可能对听力造成的潜在影响&#xff0c;让不少…

【动态规划】两个数组的 dp 问题二

两个数组的 dp 问题 1.正则表达式匹配2.交错字符串3.两个字符串的最小ASCII删除和4.最长重复子数组 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1…

迅为iTOP-STM32MP157开发板板载4G接口(选配)_千兆以太网_WIFI蓝牙模块_HDMI_CAN_RS485_LVDS接口等

迅为ITOP-STM32MP157是基于ST的STM32MP157芯片开发的一款开发平台。在STM32MP157开发平台上&#xff0c;我们也做了比较多的创新&#xff0c;其中重要的一点就是&#xff0c;iTOP-STM32MP157核心板电源管理采用ST全新配套研制的PMIC电源管理芯片STPMU1A。为整个系统的稳定运行提…

【小程序】微信小程序课程 -2 快速上手

目录 1、快速上手基本概念 1.1 小程序常用组件 1.2 tabbar配置 1.3 尺寸单位 1.4 样式 1.4.1 全局样式 app.wxss 1.4.2 局部样式 xx.wxss 2、首页案例 2.1 button组件使用 2.2 swiper swiper-item 2.3 tips效果 2.4 引入矢量图 2.5 flex&#xff08;布局&#…

老程序员的数字游戏开发笔记(三) —— Godot出你的第一个2D游戏(一篇文章完整演绎Godot制作2D游戏的全部细节)

忽略代码&#xff0c;忽略素材&#xff0c;忽略逻辑&#xff01; 游戏的精髓是人性与思想&#xff0c;我一篇一篇地制作&#xff0c;不想动手的小伙伴看一看就可以&#xff0c;感受一下也不错&#xff0c;我们是有目的性的&#xff0c;这一切都是为今后的AI融合打基础&#xf…

pg入门3—详解tablespaces—下

pg默认的tablespace的location为空&#xff0c;那么如果表设置了默认的tablespace&#xff0c;数据实际上是存哪个目录的呢? 在 PostgreSQL 中&#xff0c;如果你创建了一个表并且没有显式指定表空间&#xff08;tablespace&#xff09;&#xff0c;或者表空间的 location 为…

CCRC-DSA数据安全评估师: 2030年人工智能将更为普及

近日&#xff0c;IDC发布了一份名为《人工智能对经济和就业的全球影响》的报告&#xff0c;预测到2030年&#xff0c;采用人工智能&#xff08;AI&#xff09;技术&#xff0c;以及在现有业务中应用AI和为企业及消费者提供更优质产品/服务的相关支出&#xff0c;将累计为全球经…