当前位置: 首页 > news >正文

Leetcode力扣解题记录--第49题(map)

题目链接:49. 字母异位词分组 - 力扣(LeetCode)

题目描述

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

示例 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"]]

 题目作答

 解题的第一步是要找到一个对应关系,要将具有相同字母的放入到一个集合里,然后就可以根据这个集合的名字再取出集合里面的元素,也就是有相同字母但是不同序的单词。

利用map可以很好的找到对应关系,key就是具有相同字母的组合,map.second就是存放所有相同字母但是不同序的单词。

我们可以使用一个哈希表( std::unordered_map),其中:

Key 是每个字符串排序后的结果。

Value 是一个字符串列表(vector<string>),用来存放所有能生成这个键的原始字符串。

Key:我们需要为每个字符串生成一个唯一的标识,这个标识对于所有字母异位词来说都应该是相同的。一个非常直观有效的方法是对字符串的字符进行排序。无论原始顺序如何,"eat", "tea", "ate" 在排序后都会得到同一个字符串:"aet"。同样,"tan""nat" 排序后都会得到 "ant"。这个排序后的字符串 "aet""ant" 就可以作为它们共同的“键”。

vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> map;for (string str : strs) {string key = str;sort(key.begin(), key.end());// 使用排序后的 `key` 作为哈希表的键,// 将原始的、未排序的字符串 `str` 添加到该键对应的值中。map[key].push_back(str);}// 存放返回结果vector<vector<string>> result;for (auto pair : map) {// pair.first 是键// pair.second 是值(如 ["eat", "tea", "ate"])result.push_back(pair.second);}return result;}

 

http://www.lryc.cn/news/578394.html

相关文章:

  • 闲庭信步使用SV搭建图像测试平台:第二十三课——图像的直方图叠加
  • torch.nn
  • 美团2025年02.15架构师面试分享1
  • 飞算JavaAI—AI编程助手 | 编程领域的‘高科技指南针’,精准导航开发!
  • 【每天一个知识点】均值偏移(Mean-Shift)
  • chromedriver
  • 浅谈Docker Kicks in的应用
  • Java 中 List.stream() 的全面使用指南(含完整示例)
  • 若依中复制到剪贴板指令的使用v-clipboard
  • 安装emsdk 4.0.10报Connection reset by peer解决
  • Kafka 生产者和消费者高级用法
  • 基于Socketserver+ThreadPoolExecutor+Thread构造的TCP网络实时通信程序
  • 组合模式在SSO搜索和关键词重叠法中的优化应用
  • ASP.NET Core 请求日志中间件
  • MediaPipe框架解析(三):android edge_detection详解
  • 深度学习中常见激活函数总结
  • k8s pod调度基础
  • spring-ai-alibaba 1.0.0.2 学习(五)——集成外部工具
  • 使用tensorflow的线性回归的例子(三)
  • 【C#】如果有一个数值如 168.0000100,如何去除末尾的无效零,只显示有效的小数位数,让DeepSeek给我们解答
  • C++11中 <cinttypes>的入门与精通
  • CppCon 2018 学习:A New Take on Polymorphism
  • Redis——常用指令汇总指南(一)
  • Electron 沙箱模式深度解析:构建更安全的桌面应用
  • 笨方法学python-习题12
  • jQuery 安装使用教程
  • 【算法】动态规划 斐波那契类型: 740. 删除并获得点数
  • 设计模式之上下文对象设计模式
  • IntelliJ IDEA 2025- 下载安装教程图文版详细教程(附激活码)
  • 使用nlohmann/json.hpp实现json文件读写