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 数组中并返回。
相关推荐
m0_720245012 分钟前
1543.统计好三元组(简单)
开发语言·算法
To_OC25 分钟前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯1 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院1 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李2 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.3 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞3 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs6664 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
wuyk5555 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
会周易的程序员5 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图