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 数组中并返回。
相关推荐
Code Warrior18 分钟前
【C++】智能指针的使用及其原理
开发语言·c++
CQ_YM31 分钟前
Linux管道通信
linux·c语言·管道·ipc·管道通信
能源系统预测和优化研究33 分钟前
创新点解读:基于非线性二次分解的Ridge-RF-XGBoost时间序列预测(附代码实现)
人工智能·深度学习·算法
执笔论英雄38 分钟前
【RL】ROLL下载模型流程
人工智能·算法·机器学习
yaoh.wang44 分钟前
力扣(LeetCode) 100: 相同的树 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
SadSunset1 小时前
力扣题目142. 环形链表 II的解法分享,附图解
算法·leetcode·链表
月光在发光1 小时前
多态(虚函数核心作用原理)--C++学习(0)
c++·学习
Sunsets_Red1 小时前
2025 FZYZ夏令营游记
java·c语言·c++·python·算法·c#
自由生长20241 小时前
从流式系统中思考-C++生态和Java生态的区别
java·c++
iAkuya2 小时前
(leetcode)力扣100 19螺旋矩阵(方向数组/边界把控)
算法·leetcode·矩阵