尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

21 . 字母异位词分组

21 . 字母异位词分组
📅 发布时间:2026/6/20 15:02:19

题目介绍

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i]仅包含小写字母
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { } };

全文核心1400字,阅读+思考8min

原题链接:49. 字母异位词分组 - 力扣(LeetCode)


解析

1 . 本题需求很明确:给你一个字符串数组。对于其中相同字母(排列组合)组合成的字符串归为一组。

2 . 很自然的,结果要求返回一个二维数组。不难想,其元素则是,一组一组“字母异位词”

3 . 初拿到此题,不由想:难道我们要通过递归每个字符串,去得出每个字符串的各种排列组合……

4 . 再去统计哪些组合出现,再整合

5 . 未免想复杂了,这只是个分类工作

哈希

1 . 你可能会好奇,怎么就突然用上——“哈希”?请听接下来的分析

2 . 首先清楚此处的核心需求,材料都已经给你(vector<string>& strs)

3 . 我们需要做的,只是将它们分类,按照一定标准,把几个字符串分为一个数组。最后许多个数组合成一个大的数组

4 . 返回这个二维数组

5 . 而这个“一定标准”是什么呢?比如"nat"和"tan"凭什么分为一组,而“ate”、"eat"和"tea"凭什么分为一组

不难发现,它们都有相同的字母组成,一个不多一个不少——只是顺序不同

6 . 而让看起来顺序不一样的字母串归在一类,首先让它们展示出共性

for(auto & e : strs) { string key = e; sort(key.begin(),key.end()); // 对key原地排序,"nat"和"tan",必然展示出共性—— "ant" }

7 . 既然有了分类标准,就应该开始分类

8 . 本题要求返回一个二维数组——“万丈高楼平地起”,必然先得把一维数组准备好

9 . 不如,让key作为一个指标,它对应映射一组由key排列组合的单词

10 . 结构:unordered_map<string,vector<string>>

class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { std::unordered_map<string,vector<string>> mp; for(auto & e: strs) { string key = e; sort(key.begin(),key.end()); mp[key].push_back(e);// 展现出共性后,把当前的e往key组塞 } } };

注:

字符串少拷贝,使用for(auto & e: strs)

11 . 现在mp已经有许多组 <key , vector<string>>

12 . 还记得要求返回二维数组吗?那么不难想到,最终结果集就是mp里的vector<string>组合起来成为的二维数组

13 . 那还等什么,遍历mp,把每一组的vector<string>作为元素放进ret数组里

vector<vector<string>> vv; for(auto & it:mp) // 这里的it 为 pair<string,vector<string>> { vv.push_back(it.second); }

完整代码:

class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { // 分类 std::unordered_map<string,vector<string>> mp; for(auto & e: strs) { string key = e; sort(key.begin(),key.end()); mp[key].push_back(e); } // 整合 vector<vector<string>> vv; for(auto & it:mp) { vv.push_back(it.second); } return vv; } };

总结以及完整参考代码

class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { // 分类 std::unordered_map<string,vector<string>> mp; for(auto & e: strs) { string key = e; sort(key.begin(),key.end()); mp[key].push_back(e); } // 整合 vector<vector<string>> vv; for(auto & it:mp) { vv.push_back(it.second); } return vv; } };

相关新闻

  • Amazon Bedrock × Claude 实战:从扫描文档到结构化数据的智能处理流程
  • Mermaid Live Editor 终极指南:实时图表编辑的完整解决方案
  • FastSAM自定义数据集终极指南:从零到一的完整流程

最新新闻

  • 天堂寨性价比高好吃吊锅推荐 本地食客实测优选榜单 - 速递信息
  • 2026年高级经济师论文辅导机构深度测评:师资、服务、成果三大维度全解析 - 艾德思Editsprings
  • 别再被坑!2026年宝玑官方售后亲测核验报告,最新网点地址及电话正式公示 - 亨得利中国服务中心
  • Copy Protect
  • HunterPie:为《怪物猎人:世界》打造的专业游戏数据覆盖工具
  • 2026年度论文辅导机构口碑榜:权威师资、服务质量与性价比全维度测评 - 艾德思Editsprings

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号