尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LeetCode Hot100(2.字母异位词分组)
2.字母异位词分组题目给你一个字符串数组请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。示例 1:输入:strs [eat, tea, tan, ate, nat, bat]输出:[[bat],[nat,tan],[ate,eat,tea]]解释在 strs 中没有字符串可以通过重新排列来形成bat。字符串nat和tan是字母异位词因为它们可以重新排列以形成彼此。字符串ateeat和tea是字母异位词因为它们可以重新排列以形成彼此。示例 2:输入:strs []输出:[[]]示例 3:输入:strs [a]输出:[[a]]提示1 strs.length 1040 strs[i].length 100strs[i]仅包含小写字母解法一排序思路首先要知道如何判断两个词是字母异位词通过观察可以看到两个字母异位词的字母都是一样的因此两个字母异位词通过sort()函数进行排列后的字符串是一样的。将排列后的字符串作为键其特征对应的字符串则作为值存入到哈希表中最后输出。代码class Solution { public: vectorvectorstring groupAnagrams(vectorstring strs) { unordered_mapstring,vectorstring mp; for(string str:strs){ string key str; sort(key.begin(),key.end()); mp[key].emplace_back(str); } vectorvectorstring ans; for(auto it mp.begin();it !mp.end();it){ ans.emplace_back(it-second); } return ans; } };注意emplace_back()它是std::vector的成员函数用于在容器尾部添加元素。与push_back()的区别push_back()需要先构造对象再将其拷贝或移动到容器中而emplace_back()直接在容器尾部的内存位置原地构造对象避免了额外的拷贝或移动操作。在算法题中当向vector中插入复杂对象如string、自定义结构体时使用emplace_back()通常比push_back()性能更好解法二计数由于互为字母异位词的两个字符串包含的字母相同因此两个字符串中的相同字母出现的次数一定是相同的故可以将每个字母出现的次数使用字符串表示作为哈希表的键。由于字符串只包含小写字母因此对于每个字符串可以使用长度为 26 的数组记录每个字母出现的次数。需要注意的是在使用数组作为哈希表的键时不同语言的支持程度不同因此不同语言的实现方式也不同。代码// 定义 lambda 表达式作为自定义哈希函数用于计算 arrayint, 26 的哈希值 auto arrayHash [fn hashint{}] (const arrayint, 26 arr) - size_t { // 使用 accumulate 遍历数组通过左移和异或操作组合每个元素的哈希值 return accumulate(arr.begin(), arr.end(), 0u, [](size_t acc, int num) { return (acc 1) ^ fn(num); }); }; // 声明哈希表键为字母频次数组值为字符串向量。传入初始桶数 0 和自定义哈希函数 unordered_maparrayint, 26, vectorstring, decltype(arrayHash) mp(0, arrayHash); for (string str: strs) { arrayint, 26 counts{}; // 初始化长度为 26 的数组用于统计字母频次 int length str.length(); for (int i 0; i length; i) { counts[str[i] - a] ; // 将字符映射到 0-25 索引并累加频次 } mp[counts].emplace_back(str); // 以频次数组为键将当前字符串加入对应的列表中 } vectorvectorstring ans; // 初始化结果数组 for (auto it mp.begin(); it ! mp.end(); it) { ans.emplace_back(it-second); // 遍历哈希表将每个分组值加入结果数组 } return ans; // 返回最终的分组结果
RELATED

相关推荐

Java学习进程8

Java学习进程8

Java学习进程8 链表 继上篇明确了动态数组具备动态扩容,取值快等优势,但存在添加删除数据速度较慢等缺陷,链表的数据结构恰好弥补了这一短板。 链表原理 链表是不连续的线性存储结构,依靠每个节点内部的引用(指针&…

📅 2026/8/24 1:26:11
Claude Code被曝重大隐患,揭开了算法安全的帷幕

Claude Code被曝重大隐患,揭开了算法安全的帷幕

目录一、Claude Code很厉害,但是要小心二、如何验证算法的安全性?三、番瓜AI多模态生成算法四、江苏迅高智能科技一、Claude Code很厉害,但是要小心 Claude Code (简称CC) 就是全球第一的AI编程 Agent。我想现在很多人都会认可这句话&#x…

📅 2026/9/25 14:55:07
Kamailio async模块

Kamailio async模块

ASYNC 模块 作者:Daniel-Constantin Mierla micondagmail.com 编辑:Daniel-Constantin Mierla micondagmail.com 版权所有 © 2011-2016 asipto.com 目录 管理员指南 概述依赖项 Kamailio 内置模块外部库与应用 配置参数 workers(整数…

📅 2026/9/24 15:17:52
MORE NEWS

更多资讯

📰

Phoenix 中 OTel contextvars 与 async 边界的实战避坑指南:为何不在异步生成器清理路径里使用 contextvars

可观测性AI 评测LLMOpsAI 应用人工智能 【免费下载链接】phoenix AI Observability & Evaluation 项目地址: https://gitcode.com/gh_mirrors/phoenix13/phoenix 点击查看 免费下载 本文是 Phoenix(AI Observability & Evaluation 平台&#xf…

📰

云栖大会第一印象:机器智能的经济学

机器智能是一个全新的物种,它正在把“思考”变成一种可以规模化供给的商品。作者 | 高 飞今天2026 年云栖大会第一天的日程才结束,从阿里巴巴集团 CEO 吴泳铭的演讲出发,对主论坛写一下第一印象解读。虽然这是一个毫无疑问的技术峰会&#…

📰

Java工资管理系统课设:数据库设计与事务实战

简介:本资源是一份面向高校数据库课程设计的Java企业级工资管理系统完整实践文档,适用于计算机、软件工程等专业本科生完成《数据库原理及应用》课程设计任务。文档系统覆盖需求分析、E-R建模、数据库逻辑设计(含员工、基本工资、津贴三张核心…

📰

Mac访达缩略图不显示?从缓存到QuickLook的完整修复指南

开篇先讲一个八成Mac用户都撞见过的场景:今天打开访达准备找图片,结果一排排文件图标全变成了白色占位符,图片缩略图、视频预览、PDF封面一个都不显示。你以为是文件坏了,点开内容却一切正常,再按一下空格想快速预览&a…

📰

轻量级CRM自建实战:Node.js+Electron+SQLite完整指南

1. 项目背景:为什么我在2024年决定自建一个CRM先说说我为什么捣鼓这个项目。事情起因很简单:去年年初给朋友的一个小团队做客服系统选型,试了一圈市面上的CRM,要么是定价贵得离谱,按坐席数收费,一个账号一年…

📰

昇腾Atlas 300V部署YOLO:从环境搭建到推理优化全指南

1. 这个叫 atlas 的项目到底是什么这两年搞深度学习部署的朋友,多少都听过atlas这个名字。但说实话,我第一次看到的时候也疑惑过:它到底是一个软件框架、一个硬件型号、还是一套完整的部署方案?后来真正上手才发现,atl…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬