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

LeetCode49. 字母异位词分组(2024秋季每日一题 4)

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

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

1 < = s t r s . l e n g t h < = 1 0 4 1 <= strs.length <= 10^4 1<=strs.length<=104
0 < = s t r s [ i ] . l e n g t h < = 100 0 <= strs[i].length <= 100 0<=strs[i].length<=100
s t r s [ i ] strs[i] strs[i] 仅包含小写字母


思路:

  • 遍历给定的字符串数组,对每一个字符串,对其进行排序,如果不存在与 哈希表,则新建一个字符串数组,
  • key=排序后的字符串,value=字符串数组的下标,hash[排序后的字符串]=字符串数组的下标,
  • 例子:“ate”、“eat”,排序后都是 “aet”,所以可以通过排序判断 “字母异位词” 是否已经存在,
  • 存在的话,通过 hash 表找出对应的数组,加入进去即可。
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> res;unordered_map<string, int> h;for(const string& s: strs){string back_str = s;sort(back_str.begin(), back_str.end());if(h.count(back_str)){int idx = h[back_str];res[idx].push_back(s);}else{vector<string> a;a.push_back(s);res.push_back(a);h[back_str] = res.size() - 1;}}return res;}
};

http://www.mrgr.cn/news/12534.html

相关文章:

  • STM32学习记录-05 -1-TIM定时中断
  • 【Liunx入门】Liunx软件包管理器
  • 【Qt】容器类控件TabWidget
  • 2-74 基于matlab的图像k-means聚类GUI
  • Spring核心概念复习AOP
  • 硬件调试经验积累 关于RTC 时钟问题。
  • TypeScript为何需要定义比较复杂的泛型类型?
  • Dockerfile应用、私有仓库
  • C#WinFrom 中实现可自定义按钮和事件的消息提示框
  • 最佳外推发帖器推荐
  • Rust: Reading and Writing Files
  • Akka-路由策略
  • 求解器的学习记录
  • vue调用booststrap弹窗
  • Apache RocketMQ 批处理模型演进之路
  • Jackson 忽略注解 @JsonIgnore 不生效
  • ssrf,csrf漏洞复现
  • 蓝牙资讯|2024Q2全球个人智能音频市场出货量1.1亿部
  • 集合及数据结构第十节(下)————常用接口介绍、堆的应用和java对象的比较
  • 【Linux入门】shell基础篇——while循环与until循环