LeetCode 热题 100——day2 字母异位词分组

✨ 把代码写进星轨,用逻辑丈量宇宙。

导航 链接
个人主页 🏠 星轨初途
基础语言专栏 💻 C语言📚 数据结构
刷题实战专栏 🚀 算法及编程题分享、📝 力扣每日刷题分享

文章目录

LeetCode:字母异位词分组

题目思路

字母异位词虽然字符顺序不同,但将字符串排序后,结果一定相同。

例如:

text 复制代码
"eat" -> "aet"
"tea" -> "aet"
"ate" -> "aet"

因此,可以将排序后的字符串作为分组依据。


方法一:排序 + 哈希表

使用排序后的字符串作为哈希表的 key,原字符串保存到对应的 vector 中。

例如:

text 复制代码
"aet" -> ["eat", "tea", "ate"]
"ant" -> ["tan", "nat"]
"abt" -> ["bat"]

复杂度分析

设字符串数量为 N,每个字符串平均长度为 K

  • 时间复杂度:O(N × KlogK)
  • 空间复杂度:O(N × K)

代码实现

cpp 复制代码
class Solution
{
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs)
    {
        unordered_map<string, vector<string>> mp;
        for (string s : strs)
        {
            string key = s;
            sort(key.begin(), key.end());
            mp[key].push_back(s);
        }
        vector<vector<string>> ans;
        for (auto& p : mp)
        {
            ans.push_back(p.second);
        }
        return ans;
    }
};

方法二:排序 + 连续分组

将排序后的字符串和原字符串绑定在一起:

text 复制代码
pair<排序后的字符串, 原字符串>

然后对所有 pair 进行排序。

排序后,相同 key 的元素会连续排列,再依次完成分组。

复杂度分析

  • 字符串内部排序:O(N × KlogK)
  • 整体排序:O(NlogN × K)
  • 空间复杂度:O(N × K)

代码实现

cpp 复制代码
class Solution
{
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs)
    {
        vector<pair<string, string>> temp;
        for (const string& s : strs)
        {
            string key = s;
            sort(key.begin(), key.end());

            temp.push_back({key, s});
        }
        sort(temp.begin(), temp.end());
        vector<vector<string>> ans;
        for (int i = 0; i < temp.size();)
        {
            int j = i;
            vector<string> group;
            while (j < temp.size() && temp[j].first == temp[i].first)
            {
                group.push_back(temp[j].second);
                ++j;
            }
            ans.push_back(group);
            i = j;
        }
        return ans;
    }
};

总结

方法 核心思路 时间复杂度 空间复杂度
排序 + 哈希表 排序结果作为 key,使用哈希表分组 O(N × KlogK) O(N × K)
排序 + 连续分组 保存 {key, 原字符串},整体排序后分组 O(NK(logK + logN)) O(N × K)

两种方法都利用了:字母异位词排序后结果相同

但哈希表方法代码更加简洁,也是这道题最常用的解法;整体排序方法则不需要使用哈希表。

相关推荐
anew___2 分钟前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
吞下星星的少年·-·4 分钟前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime1 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt2 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
和裕2 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技3 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
shirsl4 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王5 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218615 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.6 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法