每日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;
    }
};
相关推荐
坚果派·白晓明11 分钟前
【鸿蒙PC】SDL3 移植:AtomCode Skills 4 步速通多媒体库适配
c++·华为·ai编程·harmonyos·atomcode·c/c++三方库
手写码匠21 分钟前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe127 分钟前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
赴生-1 小时前
C++进阶 C++11(下)
开发语言·c++
有点。1 小时前
C++(贪心算法一)
c++·贪心算法
Matrix_111 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue1 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
赴生-2 小时前
C++进阶 异常
开发语言·c++
黄毛火烧雪下2 小时前
Java 核心知识点总结(一)
java·开发语言
其实防守也摸鱼3 小时前
软件安全与漏洞--软件安全编码与防御技术理论题库
开发语言·网络·安全·网络安全·软件安全·软件安全与漏洞