LeetCode 力扣 热题 100道(十一)字母异位词分组(C++)

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

  • 排序字符:对于每个字符串,我们将其字符排序,得到一个唯一的 "排序后的字母" 作为该字符串的标识符(key)。
  • 使用哈希表 :利用哈希表(unordered_map)来将排序后的字母作为键(key),将相同字母异位词的字符串作为值(value)。如果两个字符串排序后得到相同的结果,它们属于同一组。
  • 最终结果:哈希表中存储了多个键值对,其中每个键对应的值是一个字母异位词列表。
cpp 复制代码
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> anagrams;
        for (const string& str : strs) {
            string sorted_str = str;
            sort(sorted_str.begin(), sorted_str.end());
            anagrams[sorted_str].push_back(str);
        }
        vector<vector<string>> result;
        for (auto& pair : anagrams) {
            result.push_back(pair.second);
        }

        return result;
    }
};
  • unordered_map<string, vector<string>> anagrams; :使用哈希表 anagrams 来存储字母异位词。键是排序后的字符串,值是一个包含所有字母异位词的字符串数组。

  • 遍历每个字符串

    • 对每个字符串 str,我们创建它的副本 sorted_str
    • 使用 sort() 函数对 sorted_str 进行排序。
    • 将排序后的 sorted_str 作为哈希表的键,原字符串 str 被添加到相应的值(即字母异位词组)中。
  • 提取结果

    • 哈希表中的每个值都是一个字母异位词的组,我们将所有这些组收集到 result 数组中并返回。
相关推荐
踩坑记录8 小时前
leetcode hot100 easy 101. 对称二叉树 递归 层序遍历 bfs
算法·leetcode·宽度优先
2501_940315269 小时前
leetcode182动态口令(将字符的前几个元素放在字符串后面)
算法
安全二次方security²9 小时前
CUDA C++编程指南(7.25)——C++语言扩展之DPX
c++·人工智能·nvidia·cuda·dpx·cuda c++编程指南
老鼠只爱大米9 小时前
LeetCode经典算法面试题 #98:验证二叉搜索树(递归法、迭代法等五种实现方案详解)
算法·leetcode·二叉树·递归·二叉搜索树·迭代
爱装代码的小瓶子9 小时前
【c++与Linux基础】文件篇(4)虚拟文件系统VFS
linux·开发语言·c++
疯狂的喵15 小时前
C++编译期多态实现
开发语言·c++·算法
scx2013100415 小时前
20260129LCA总结
算法·深度优先·图论
2301_7657031415 小时前
C++中的协程编程
开发语言·c++·算法
m0_7487080515 小时前
实时数据压缩库
开发语言·c++·算法
小魏每天都学习15 小时前
【算法——c/c++]
c语言·c++·算法