每日OJ题_哈希表⑤_力扣49. 字母异位词分组

目录

[力扣49. 字母异位词分组](#力扣49. 字母异位词分组)

解析代码


力扣49. 字母异位词分组

49. 字母异位词分组

难度 中等

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

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

示例 1:

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

示例 2:

复制代码
输入: strs = [""]
输出: [[""]]

示例 3:

复制代码
输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 10^4
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母
cpp 复制代码
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        
    }
};

解析代码

互为字母异位词的单词有⼀个特点:将它们排序之后,两个单词应该是完全相同的。 所以可以利用这个特性,将单词按照字典序排序,如果排序后的单词相同的话,就划分到同一组中。

这时我们就要处理两个问题:

  • 排序后的单词与原单词需要能互相映射
  • 将排序后相同的单词划分到同⼀组

利用语言提供的容器的强大的功能就能实现这两点:

  • 将排序后的字符串( string )当做哈希表的 key 值
  • 将字母异位词数组( vector<string> )当成 val 值。
cpp 复制代码
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,vector<string>> hash;
        for(auto& e : strs)
        {
            string tmp = e;
            sort(tmp.begin(), tmp.end()); // 排序后异位次的key值都相等了
            hash[tmp].push_back(e);
        }

        vector<vector<string>> ret;
        for(auto& [x, y] : hash) // 范围for得到两个值的用法
        {
            ret.push_back(y);
        }
        return ret;
    }
};
相关推荐
choumin17 分钟前
C程序能调用extern “C“声明的带默认参数的C++函数吗?
c语言·c++·extern c·默认参数
AmyLin_200137 分钟前
PDF 色彩保真工程实践【3】上手实践:工程结构、依赖集成与一键构建运行
c++·visualstudio·pdf·zlib·vcpkg·libtiff·cmyk
并不喜欢吃鱼1 小时前
从零开始 C++------ 十六.深度拆解 C++ 智能指针:unique_ptr/shared_ptr/weak_ptr 底层模拟、内存泄漏根治
开发语言·c++
不相心 -w-1 小时前
Cmake的基础用法
linux·开发语言·c++
白白白小纯1 小时前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
撑伞的鱼99371 小时前
C++开发用什么AI编程工具效果好?2026年实测横评(附选型指南)
开发语言·c++·ai编程·cursor
大数据张老师1 小时前
Typora 导出 Word 模版操作手册
开发语言·c#·word·typora
略略略咯咯1 小时前
stream流浅拷贝
开发语言·python
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Dify 构建企业级联网搜索 Agent:查询改写、多源检索与引用溯源实战
人工智能·深度学习·算法·aigc
long3161 小时前
Java 团队入门到精通学习资料
java·开发语言