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 数组中并返回。
相关推荐
ZackSock6 小时前
Policy Gradient 极简教程
算法
Big_Yellow_J6 小时前
深入浅出了解生成模型-3:Diffusion模型原理以及代码
算法·面试
用户686916134907 小时前
哈希表实现指南:从原理到C++实践
数据结构·c++
ZackSock7 小时前
从零实现 RAG
算法
Jolyne_8 小时前
前端常用的树处理方法总结
前端·算法·面试
大老板a8 小时前
c++五分钟搞定异步处理
c++
Frank_zhou9 小时前
算法-数组实战【合并区间】中等
数据结构
前端付豪10 小时前
微信视频号推荐系统揭秘:兴趣建模、多模态分析与亿级流控架构实战
前端·后端·算法
木杉苑10 小时前
快速幂算法
算法
梦境虽美,却不长11 小时前
算法 学习 排序 2025年6月16日10:25:37
数据结构·学习·排序算法