当前位置: 首页 > article >正文

05.字母异位词分组

在这里插入图片描述

题意理解

🧠 什么是“字母异位词”?

字母异位词是指由相同的字母组成,只是排列顺序不同的单词。

比如

"eat" 和 "tea" 是异位词,它们都包含 'e'、'a' 和 't'。"ate" 也是它们的异位词。但是 "tan" 就不是,它包含 't'、'a'、'n',和上面三个字母不同。

✅ 方法一:排序作为哈希表 key

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for (const string& str : strs){string key = str;sort(key.begin(), key.end()); // 将字符串排序,作为哈希表 keymp[key].push_back(str);       // 将原字符串加入对应分组}vector<vector<string>> res;for (const auto& [key, group] : mp) {res.push_back(group);         // 提取所有 value 即为分组结果}return res;}
};

🔍 时间复杂度

  • 排序每个字符串 O(k log k),总共 n 个字符串 ⇒ O(nk log k)

💾 空间复杂度

  • 需要额外存储 HashMap 和结果集 ⇒ O(nk)

✅ 方法二:计数字符频率作为 key

class Solution 
{
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for (string& str : strs) {vector<int> count(26, 0);for (char ch : str) {count[ch - 'a']++;}// 手动编码计数数组,例如 "aabbc" → "a2b2c1"string key;for (int i = 0; i < 26; ++i) {if (count[i] > 0) {key += (char)('a' + i);key += to_string(count[i]);}}mp[key].push_back(str);}vector<vector<string>> res;for (auto& [key, group] : mp) {res.push_back(group);}return res;}
};

🔍 时间复杂度

  • 每个字符串统计字母频率 O(k),总共 n 个 ⇒ O(nk)

💾 空间复杂度

  • 存储每个字符串、HashMap 以及编码 key ⇒ O(nk)

相关文章:

05.字母异位词分组

题意理解 &#x1f9e0; 什么是“字母异位词”&#xff1f; 字母异位词是指由相同的字母组成&#xff0c;只是排列顺序不同的单词。 比如&#xff1a; "eat" 和 "tea" 是异位词&#xff0c;它们都包含 e、a 和 t。"ate" 也是它们的异位词。但…...

Mac查看MySQL版本的命令

通过 Homebrew 查看&#xff08;如果是用 Homebrew 安装的&#xff09; brew info mysql 会显示你安装的版本、路径等信息。 你的终端输出显示&#xff1a;你并没有安装 MySQL&#xff0c;只是查询了 brew 中的 MySQL 安装信息。我们一起来看下重点&#xff1a; &#x1f9fe…...

【.net core】【watercloud】树形组件combotree导入及调用

源码下载:combotree: 基于layui及zTree的树下拉框组件 链接中提供了组件的基本使用方法 框架修改内容 1.文件导入&#xff08;路径可更具自身情况自行设定&#xff09; 解压后将文件夹放在图示路径下&#xff0c;修改文件夹名称为combotree 2.设置路径&#xff08;设置layu…...

[Java 基础]面向对象-封装

封装是构建健壮、可维护和安全软件的基础。 什么是封装&#xff1f; 想象一下你的手机。你不需要知道手机内部复杂的电路、芯片和各种组件是如何协同工作的&#xff0c;你只需要知道如何使用屏幕、按键或触摸操作来打电话、发短信或玩游戏。手机的内部细节被“包裹”起来&…...

2021 RoboCom 世界机器人开发者大赛-高职组(复赛)解题报告 | 珂学家

前言 题解 2021 RoboCom 世界机器人开发者大赛-高职组&#xff08;复赛&#xff09;解题报告。 模拟题为主&#xff0c;包含进制转换等等。 最后一题&#xff0c;是对向量/自定义类型&#xff0c;重定义小于操作符。 7-1 人工智能打招呼 分值: 15分 考察点: 分支判定&…...

Python趣学篇:Pygame实现3D星空穿越动画

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《Python星球日记》🪐 目录 一、项目概览与技术栈二、核心技术原理解析1. 透视投影:让3D世界"压扁"到2D屏幕2. Z轴深度:创造…...

基于Web的安全漏洞分析与修复平台设计与实现

基于Web的安全漏洞分析与修复平台设计与实现 摘要 随着信息化进程的加快&#xff0c;Web系统和企业IT架构愈发复杂&#xff0c;安全漏洞频发已成为影响系统安全运行的主要因素。为解决传统漏洞扫描工具定位不准确、修复建议不完善、响应周期长等问题&#xff0c;本文设计并实…...

34.1STM32下的can总线实现知识(区分linux)_csdn

看过我之前的文章就知道&#xff0c;正点原子下的linux中CAN总线并没有讲的很明白&#xff0c;都是系统自带的&#xff01; 这里我找到江科大学长的can总线的讲解视频&#xff01; CAN总线入门教程-全面细致 面包板教学 多机通信_哔哩哔哩_bilibili 在这里我也会一步一步讲解CA…...

相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机Camera日志分析之二十三:高通相机Camx 基于预览1帧的process_capture_request二级日志分析详解 这一篇我们开始讲: 相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_req…...

Linux 内核中 skb_dst_drop 的深入解析:路由缓存管理与版本实现差异

引言 在 Linux 内核网络子系统中,sk_buff(简称 SKB)是数据包在内核态流转的核心数据结构。为了高效处理网络数据包的路由选择,内核通过 dst_entry 结构体缓存路由信息,而 skb_dst_drop 函数则是管理这些路由缓存引用的关键工具。本文将从作用、实现原理、内核版本差异等多…...

考研系列—操作系统:冲刺笔记(4-5章)

目录 第四章 文件管理 1.真题总结文件管理方式 (1)目录文件的FCB就是“目录名-目录地址” (2)普通文件的FCB (3)区分索引文件、顺序文件、索引分配 (4)文件的物理结构 ①连续分配方式 ②链接分配 ③索引分配-使用索引表(一个文件对应一张索引表!!!) 计算考点:超级…...

功能管理:基于 ABP 的 Feature Management 实现动态开关

&#x1f680; 功能管理&#xff1a;基于 ABP 的 Feature Management 实现动态开关 &#x1f4da; 目录 &#x1f680; 功能管理&#xff1a;基于 ABP 的 Feature Management 实现动态开关&#x1f4da; 一、背景分析&#x1f9e9; 二、核心功能设计2.1 定义 Feature 常量与分组…...

2025年想冲网安方向,该考华为安全HCIE还是CISSP?

打算2025年往网络安全方向转&#xff0c;现在考证是不是来得及&#xff1f;考啥证&#xff1f; 说实话&#xff0c;网络安全这几年热得发烫&#xff0c;但热归热&#xff0c;入门门槛也不低&#xff0c;想进这个赛道&#xff0c;技术、项目经验、证书&#xff0c;缺一不可。 …...

ES6 深克隆与浅克隆详解:原理、实现与应用场景

ES6 深克隆与浅克隆详解&#xff1a;原理、实现与应用场景 一、克隆的本质与必要性 在 JavaScript 中&#xff0c;数据分为两大类型&#xff1a; 基本类型&#xff1a;Number、String、Boolean、null、undefined、Symbol、BigInt引用类型&#xff1a;Object、Array、Functio…...

Go Gin框架深度解析:高性能Web开发实践

Go Gin框架深度解析&#xff1a;高性能Web开发实践 Gin框架核心特性概览 Gin是用Go语言编写的高性能Web框架&#xff0c;以其​​闪电般的路由性能​​&#xff08;基于httprouter&#xff09;和​​极简的API设计​​著称&#xff1a; package mainimport "github.com…...

mybatis 参数绑定错误示范(1)

采用xml形式的mybatis 错误示例&#xff1a; server伪代码为&#xff1a; Map<String, Object> findMapNew MapUtil.<String, Object>builder().put("applyUnit", appUnit).put("planYear", year ! null ? year : -1).put("code&quo…...

每天掌握一个Linux命令 - rpm

Linux 命令工具 rpm 使用指南 Linux 命令工具 rpm 使用指南一、工具概述二、安装方式1. 系统预装2. 源码编译安装&#xff08;极少场景&#xff09; 三、核心功能四、基础用法1. 安装软件包2. 升级软件包3. 查询软件包信息4. 卸载软件包5. 验证文件完整性 五、进阶操作1. 批量操…...

常见的MySQL索引类型

在MySQL中&#xff0c;索引是用来提高数据库查询效率的一种数据结构。根据不同的使用场景和需求&#xff0c;MySQL提供了多种类型的索引&#xff0c;每种索引都有其特定的应用场景和优化效果。下面是一些常见的MySQL索引类型&#xff1a; 1. B-Tree索引&#xff1a; 这是最常…...

01串(二进制串)与集合之间存在天然的对应关系 ← bitset

【集合的二进制表示‌】 ● 01 串&#xff08;二进制串&#xff09;与集合之间存在天然的对应关系。对应机理为每个二进制位可以表示集合中一个元素的存在&#xff08;1&#xff09;或不存在&#xff08;0&#xff09;。例如&#xff0c;集合 {a, b, c} 的子集 {a, c} 可以表示…...

153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划

麦肯锡咨询的流程管理以其高度结构化、数据驱动和结果导向的核心特点著称&#xff0c;旨在为客户提供清晰、可行且价值最大化的解决方案。其典型流程可概括为以下几个关键阶段&#xff1a;下载资料请查看文章中图片右下角信息 问题界定与结构化&#xff1a; 这是流程的基石。麦…...

[特殊字符] 革命性AI提示词优化平台正式开源!

AI时代最强大的Prompt工程师已经到来&#xff01; 你是否还在为写不出高质量提示词而头疼&#xff1f;是否羡慕那些能够驾驭AI、让ChatGPT、Claude乖乖听话的"提示词大师"&#xff1f;今天&#xff0c;我们为你带来一个颠覆性的解决方案——TokenAI Auto-Prompt&…...

我的概要设计模板(以图书管理系统为例)

一、总述 1.1 需求或目标 随着数字化阅读普及&#xff0c;传统图书馆管理方式效率低下、资源检索不便。为提升图书管理效率&#xff0c;方便读者借阅与查询&#xff0c;公司计划开发 “在线图书管理系统”&#xff0c;实现图书的电子化管理、快速检索、在线借阅等功能&#x…...

【使用】【经验】docker 清理未使用的镜像的命令

docker images prune在 Docker 中清理未使用的镜像&#xff08;包括悬空镜像和完全未被引用的镜像&#xff09;&#xff0c;可以使用以下命令&#xff1a; 1. ​删除所有悬空镜像​&#xff08;推荐常用&#xff09; docker image prune​悬空镜像 (dangling images)​​ 是指…...

DrissionPage爬虫包实战分享

一、爬虫 1.1 爬虫解释 爬虫简单的说就是模拟人的浏览器行为&#xff0c;简单的爬虫是request请求网页信息&#xff0c;然后对html数据进行解析得到自己需要的数据信息保存在本地。 1.2 爬虫的思路 # 1.发送请求 # 2.获取数据 # 3.解析数据 # 4.保存数据 1.3 爬虫工具 Dris…...

iptables实战案例

目录 一、实验拓扑 二、网络规划 三、实验要求 四、环境准备 1.firewall &#xff08;1&#xff09;配置防火墙各大网卡IP并禁用 firewall和selinux &#xff08;2&#xff09;打开firewall路由转发 2.PC1&#xff08;内网&#xff09; &#xff08;1&#xff09;配置防…...

机器学习与深度学习07-随机森林01

目录 前文回顾1.随机森林的定义2.随机森林中的过拟合3.随机森林VS单一决策树4.随机森林的随机性 前文回顾 上一篇文章链接&#xff1a;地址 1.随机森林的定义 随机森林&#xff08;Random Forest&#xff09;是一种集成学习算法&#xff0c;用于解决分类和回归问题。它基于决…...

回归分析-非线性回归及岭回归.docx

一.题目要求1.用SPSS软件练习建立多元线性回归方程,分析数据的多重共线性,利用后退法和逐步回归法选择变量,练习用岭回归方法处理该模型数据并作比较 2.用SPSS软件练习建立模型的非线性回归方程 二.数据分析(一)题目:课本7.6 1、数据 一家大型商业银行有多家分行,近年来…...

Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略

一、搜索范式转变&#xff1a;从链接引导到答案交付 Google自2023年起逐步推出AI搜索功能&#xff0c;经历了SGE&#xff08;Search Generative Experience&#xff09;和Gemini阶段&#xff0c;最终在2025年全面上线了「AI Mode」搜索模式。与此同时&#xff0c;也保留了一种过…...

docker创建postgreSql带多个init的sql

好的&#xff01;下面是一个完整的可运行项目结构&#xff0c;包含&#xff1a; ✅ docker-compose.yml&#xff1a;启动 PostgreSQL&#xff08;支持 pgvector&#xff09; ✅ init-db.sql&#xff1a;创建数据库 myapp ✅ init-schema.sql&#xff1a;在 myapp 中建表并初始…...

掌握 MotionLayout:交互动画开发

前言 在 Android 开发中&#xff0c;系统自带的属性动画&#xff08;如 ObjectAnimator 和 ValueAnimator&#xff09;虽然功能强大&#xff0c;但在复杂动画场景下&#xff0c;第三方动画库能提供更高效的开发体验和更丰富的效果。本文将深入解析 Lottie、MotionLayout、Andr…...