C++代码随想录刷题知识分享-----判断两个字符串是否为字母异位词(Anagram)【LeetCode 242】
✨ 题目描述
给定两个字符串 s
和 t
,请判断 t
是否是 s
的字母异位词。
📌 示例 1:
输入:s = "anagram", t = "nagaram"
输出:true
📌 示例 2:
输入:s = "rat", t = "car"
输出:false
✅ 限制条件:
- 1 <= s.length, t.length <= 5 * 10⁴
s
和t
仅包含小写字母
🧠 解题思路
✅ 字母异位词的定义:
两个字符串是字母异位词,当且仅当:
- 它们长度相同;
- 每个字符出现的次数完全一致。
我们可以通过哈希表统计字符频率来判断两字符串是否是异位词。
🚀 解法一:使用固定大小数组哈希(只适用于小写英文字母)
🎯 思路:
- 使用一个大小为 26 的整型数组
hash[26]
; - 对字符串
s
中的每个字符计数+1
; - 对字符串
t
中的每个字符计数-1
; - 最终如果
hash
中所有元素都为0
,说明是异位词。
✅ C++ 代码(含详细注释):
class Solution {
public:bool isAnagram(string s, string t) {// 长度不同,直接不是异位词if (s.length() != t.length()) return false;int hash[26] = {0}; // 小写字母 a~z 对应下标 0~25// 统计 s 中字符频率for (char ch : s) {hash[ch - 'a']++;}// 抵消 t 中字符频率for (char ch : t) {hash[ch - 'a']--;}// 检查是否所有字符频率归零for (int i = 0; i < 26; ++i) {if (hash[i] != 0) return false;}return true;}
};
或者:
class Solution {
public:bool isAnagram(string s, string t) {int hash[26]={0};for (int i=0;i<s.size();i++){hash[s[i]-'a']++;}for(int i=0;i<t.size();i++){hash[t[i]-'a']--;}for (int i=0;i<26;i++){if(hash[i]!=0){return false;}}return true;}
};
💬 解法二(进阶):支持 Unicode 字符(使用 unordered_map
)
如果字符串中可能包含 Unicode 字符或大小写字母混合,就不能使用固定大小数组了。
✅ 改进思路:
- 使用
unordered_map<char, int>
替代数组; - 同样对
s
加一、对t
减一; - 最后检查 map 中所有值是否为 0。
🔍 C++ 代码:
class Solution {
public:bool isAnagram(string s, string t) {if (s.size() != t.size()) return false;unordered_map<char, int> count;for (char ch : s) count[ch]++;for (char ch : t) count[ch]--;for (auto& [key, val] : count) {if (val != 0) return false;}return true;}
};
⏱️ 复杂度分析
解法 | 时间复杂度 | 空间复杂度 | 适用场景 |
---|---|---|---|
数组哈希 | O(n) | O(1)(固定 26 个字符) | 小写字母 a~z |
unordered_map | O(n) | O(k)(字符种类) | 任意字符、支持 Unicode |
🧩 面试延伸问题
- ✅ 如果要区分大小写,只需保留字符原值,不转成小写。
- ✅ 如果字符是 Unicode,建议用
unordered_map<wchar_t, int>
或unordered_map<char32_t, int>
。 - ✅ 能不能用排序?可以,排序后直接比较两个字符串是否相等,但时间复杂度是
O(n log n)
,略低效。
🧠 总结
- 本题的核心是:统计字符频率,并判断是否一致。
- 面试中建议优先使用 O(n) 的哈希法,数组适合小写字母,map 支持通用情况。
- 本题可作为许多字符串处理题的基础(如最小覆盖子串、异位词分组等)。
🔚 附:常见技巧回顾
技巧 | 说明 |
---|---|
ch - 'a' | 快速将 'a'~'z' 映射到数组下标 0~25 |
unordered_map<char, int> | 用于统计任意字符的频率 |
std::all_of (C++17) | 判断数组是否全为某值 |
如果你觉得这篇博客有帮助,欢迎点赞收藏!如有问题或建议,也欢迎评论交流 😊
如果你还想了解类似题型,比如回文判断、最短覆盖子串、异位词分组,欢迎关注后续内容~ 🚀
相关文章:
C++代码随想录刷题知识分享-----判断两个字符串是否为字母异位词(Anagram)【LeetCode 242】
✨ 题目描述 给定两个字符串 s 和 t,请判断 t 是否是 s 的字母异位词。 📌 示例 1: 输入:s "anagram", t "nagaram" 输出:true📌 示例 2: 输入:s "…...
Canal mysql to mysql 增加 online 库同步配置指南
Canal 增加新库 online 的配置指南 1. 停止 Canal Adapter 服务 ./bin/stop.sh2. 数据库备份与导入 备份源数据库 mysqldump -h 127.0.0.1 -P 3307 --single-transaction -uroot -p -B online > online.sql导入到目标数据库 mysql -h 127.0.0.1 -P 3308 -uroot -p <…...
Spring MVC中Controller是如何把数据传递给View的?
在 Spring MVC 中,Controller 负责请求的处理,准备需要展示的数据,并将这些数据传递给 View,由 View 负责最终的页面渲染。数据从 Controller 传递到 View 主要通过模型 (Model) 实现。 Spring MVC 提供了以下几种方式让 Control…...
FAST-LIO笔记
1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器(IEKF)将激光雷达特征点与IMU数据进行融合,使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…...
挑战用豆包教我学Java01天
今天是豆包教我学Java的第一天,废话不多说直接开始。 1.每日题目: 基础语法与数据类型 题目:编写一个 Java 程序,从控制台读取两个整数,然后计算它们的和、差、积、商,并输出结果。题目:编写…...
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
文章目录 前言一、RT-Thread工程创建二、ADC工程创建三、ADC功能实现1.ADC.c2.ADC.h3.mian.c 四、效果展示和工程分享总结 前言 本文使用的是RT-Thread最新的驱动5.1.0,兼容下面的所有驱动。使用的开发板是蓝桥杯嵌入式国信长安的开发板,MCU是STM32G431…...
居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
居民健康监测小程序 目录 基于微信小程序的居民健康监测小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、健康科普管理 5.3公告类型管理 3、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...
电商双11美妆数据分析
图中展示的是在Jupyter Notebook环境下的Python代码及运行结果。代码利用 seaborn 和 matplotlib 库,以 datal 数据集为基础,绘制上下两个子图。上方子图呈现各店铺中各大类的销售量,下方子图展示各店铺中各大类的销售额,通过条形…...
Spark-Core(双Value类型)
一、RDD转换算子(双Value类型) 1、intersection 函数签名: def intersection(other: RDD[T]): RDD[T] 函数说明:对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 举栗: val dataRDD1 sparkContext.makeRDD(List(…...
【数据库原理及安全实验】实验六 角色访问控制
指导书原文 安全性管理二 【实验目的】 1) 通过语句设置登录用户的权限,实现对不同用户的操作权限的限定。 【实验原理】 1) 定义数据库角色,授予该角色特定权限,建立不同的用户将其置入不同的角色之下,即等于分配了该用户不…...
windows安装micromamba
windows安装 winget install Mamba.Micromamba Set-ExecutionPolicy RemoteSigned micromamba activate 第一次运行会报错,把报错中间那一句init代码跑一下 创建环境什么的和conda一样 把conda换成micromamba就行 绑定快捷键,winget安装&#x…...
vue-quill-editor的失焦事件
vue-quill-editor的用法再此就不再赘述了,只记录我在使用过程中踩的坑。 版本:Vue2 vue-quill-editor3.0.6 封装组件: <vue-quill-editorclass"editor":class"dynamicClasses"ref"myTextEditor"v-model&quo…...
【工具变量】最新华证ESG评级得分数据-含xlsx及dta格式(2009-2024.12)
参考《经济研究》中方先明(2023)的做法,将华证ESG评级进行赋值,指标包含C、CC、CCC、B、BB、BBB、A、AA、AAA共9个等级,将上市公司ESG等级从低到高分别赋值为1至9。将华证ESG评级得分数据更新至2024年12月31日…...
【纯小白博客搭建】Hugo+Github博客部署及主题(stack)美化等界面优化记录
这里写目录标题 HugoGithub博客部署及主题(stack)美化等界面优化写在前面hugo博客搭建教程第一种方案第二种方案 添加浏览量和统计字数添加评论功能添加访客地图 HugoGithub博客部署及主题(stack)美化等界面优化 效果图如下 如果…...
题解:CF2107E Ain and Apple Tree
首先考虑无解的情况。 当这棵树为一条链时,答案取到最大值。证明很简单,假设存在一个节点 u u u 至少有 2 2 2 个孩子节点,任取两个 v 1 , v 2 v_1,v_2 v1,v2,则 dep ( LCA ( v 1 , v 2 ) ) dep ( u ) \text{dep}(\o…...
STM32的看门狗
独立看门狗(IWDG) IWDG简介 独立看门狗(Independent Watchdog,通常缩写为IWDG)主要作用是主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。 WDG本质上是一个12位的递减计数器(滴答定…...
小王包子铺的融资过程以及IPO上市过程
用包子铺来打个通俗易懂的比喻,一步步讲清楚从创业到融资上市的全过程。 🥟 故事背景:老王的包子铺 老王做的包子特别好吃,于是他决定不再只是摆摊,而是创办一家叫 “老王包子铺” 的连锁店。我们就以老王创业为线索&…...
WPF 触发器 Trigger
触发器 Trigger 触发器(Trigger)是 WPF 中的一种机制: 当某个条件满足时,自动改变控件的某些属性,比如颜色、大小、透明度等。 换句话说,就是"如果……那么就……" 的一种规则。 常见触发器类…...
CentOS算法部署
CentOS服务部署 第一章 启动两个算法服务第一步:上传算法文件第二步:安装 tmux第三步:启动服务(1) 启动第一个算法服务(2) 启动第二个算法服务 第四步:关闭防火墙 第一章 启动两个算…...
极狐GitLab 命名空间的类型有哪些?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 命名空间 命名空间在极狐GitLab 中组织项目。因为每一个命名空间都是单独的,您可以在多个命名空间中使用相同的项…...
使用 Apache POI 生成包含文本和图片的 Word 文档
一、概述 在实际开发场景中,我们经常需要自动生成包含文本和图片的 Word 文档。本示例借助 Apache POI 库,实现了向 Word 文档中插入文本和图片的功能。代码会循环插入多次文本和同一张图片,并且对图片进行等比缩放处理,以保证图片…...
Eclipse通过Tomcat启动web项目报错
错误内容:Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext。 本来运行的好好的,执行了Maven->Update Porject后就报上面的错。 通过检查发现,执行上面的命令后会将下面截图中的maven depen…...
5.7线性动态规划1
P2285 [HNOI2004] 打鼹鼠 #include<bits/stdc.h> using namespace std; struct node{int x, y, t; }a[100010]; int dp[100010]; void solve(){int n, m; cin >> n >> m;for(int i 1; i < m; i){cin >> a[i].t >> a[i].x >> a[i].y;}…...
Word如何制作三线表格
1.需求 将像这样的表格整理成论文中需要的三线表格。 2.直观流程 选中表格 --> 表格属性中的边框与底纹B --> 在设置中选择无(重置表格)–> 确定 --> 选择第一行(其实是将第一行看成独立表格了,为了设置中线&…...
【Mybatis-plus常用语法】
MyBatis-Plus 是 MyBatis 的增强工具,提供了很多便捷的功能来简化开发。以下是一些 MyBatis-Plus 的常见语法: 实体类注解:使用 TableName 注解来指定实体类和数据库表的映射关系。 TableName("user") public class User {privat…...
16.Excel:数据收集
一 使用在线协作工具 简道云。 excel的在线表格协作在国内无法使用,而数据采集最需要在线协作。 二 使用 excel 1.制作表格 在使用excel进行数据采集的时候,会制作表头给填写人,最好还制作一个示例。 1.输入提示 当点击某个单元格的时候&am…...
基于Django框架开发的企业级IT资产管理系统
CMDB 资产管理系统 资产管理系统是一个基于Django框架开发的企业级IT资产管理平台,专注于数据中心和IT设备的全生命周期管理。该系统提供了完整的资产管理功能,包括设备管理、数据中心管理、用户权限管理等核心功能。 项目截图 技术栈 后端 Python 3…...
Redis 集群版本升级指南:从 Redis 7 升级到 Redis 8
Redis 集群升级主要有两种方案: 1、在线滚动升级(无需停机) 2、停机升级(需停止服务) 一、准备工作 1. 下载 Redis 8 安装包 # Redis 8.0.0 示例(请替换为实际版本) http://download.redis.io…...
使用 Couchbase Analytics Service 的典型步骤
下面是使用 Couchbase Analytics Service 的典型步骤,包括部署、配置、创建数据集、运行查询以及监控优化等环节。 首先,您需要安装并启用 Analytics 服务;然后将节点加入集群并重平衡;接着在 Analytics 中映射数据服务的集合&am…...
C++ stl中的vector的相关用法 迭代器失效问题
文章目录 vector的介绍及使用vector的定义 vector的空间相关问题vector的迭代器的使用vector的增删查改vector迭代器失效问题 vector的介绍及使用 1、vector是用于表示可变大小数组的序列容器。 2、vector就像数组一样,采用的是连续的空间来存储元素,也…...
【Redis】哨兵机制和集群
🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、哨兵机制 Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工的进行主从切换,同时需要大量的客户端需要被通知切换到…...
uni-app 引入vconsole web端正常,安卓端报错 Cannot read property ‘sendBeacon‘ of undefined
reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught TypeError: Cannot read property sendBeacon of undefined vconsole 只支持 web 端,…...
数据管道的解耦艺术:Dagster I/O管理器实现存储与逻辑分离
在现代数据工程中,高效管理数据的读写逻辑是构建可维护管道的关键。Dagster的**I/O管理器(I/O Managers)**通过分离数据处理与数据存储逻辑,显著提升了代码的可复用性和灵活性。本文将深入解析其核心概念、应用场景及实战示例。 一…...
shell脚本--2
1、实时监控cpu、内存的shell脚本 #!/bin/bash# 获取当前时间 DATE$(date "%Y-%m-%d %H:%M:%S")# 获取CPU使用情况 CPU_USAGE$(top -b -n1 | grep "Cpu(s)" | awk {print $2 $4})# 获取内存使用情况 MEMORY_USAGE$(free | grep Mem | awk {print $3/$2 *…...
jenkins配置多nexus仓库多maven版本
jenkins多环境多nexus仓库,多maven版本 使用优化,jenkins多环境多nexus仓库,多maven版本 1、多settings.xml设置构建 背景:jenkins本地安装一个maven版本,默认只有一个settings.xml文件指定本地和远端nexus仓库&#x…...
Linux理解文件fd
先来段代码回顾C文件接口 myfile.c写文件 #include <stdio.h>int main() {FILE *fp fopen("log.txt","a");if(NULL fp){perror("fopen");return 1;}fprintf(fp,"helloWorld,%d,%s,%lf\n",10,"lsf",3.14);fclose(fp)…...
【Python】os模块
os 模块是 Python 标准库中用于与操作系统交互的核心模块,提供了许多操作文件和目 录的函数。 1. 基本介绍 os 模块提供了以下主要功能: 文件和目录操作路径操作进程管理环境变量访问 import os2. 常用功能分类 2.1 文件和目录操作 函数/方法描述o…...
2025 Mac常用软件安装配置
1、homebrew 2、jdk 使用brew安装jdk: 配置环境变量: 3、maven 使用brew安装maven: 配置环境变量: 4、光标平滑移动 5、鼠标滚轮调整 mos 6、常用的终端工具 tabby 7、软件卸载 腾讯柠檬:https://lemon.qq.com/ 8、…...
PyQt5 实现自定义滑块,效果还不错
最近,黄老师闲来无事,需要做一个 播放器的滑块,但是Qt官方的长这个样子,不太好看 于是我自己写了一个,效果还不错,请看下面的效果图: 功能可以点击,可以拖拽改变进度,和播放器的进度条一样 源码如下: 需要的自取 import sys from PyQt5.QtWidgets import QApplicat…...
如何在ENVI Classic 和 ENVI中进行波段合成
示例使用Landsat的三个波段进行合成为示例,合成后展示为假彩色。 对应关系为: Red -- b4(近红外 near-infrared)NIR Green -- b3 (红光 Red) Blue -- b2 (绿光 Green) 一、ENVI…...
协方差与皮尔逊相关系数:从定义到应用的全面解析
目录 一、协方差与皮尔逊相关系数的定义1.1 协方差(Covariance)1.2 皮尔逊相关系数(Pearson Correlation Coefficient) 二、协方差的定义与推导逻辑2.1 核心目标:衡量变量的“协同变化”2.2 数学表达的直观性2.3 从线性…...
ICML 2025录取率公布,spotlight posters仅占2.6%
近日,ICML 2025公布了论文录用结果。本次大会共收到 12,107篇有效论文投稿,比去年增加了28%,今年录取论文3,260篇,录取率为 26.9%。其中仅有313篇被列为“焦点海报”(即所有投稿中排名前2.6%的论文)&#x…...
kotlin一个函数返回多个值
一、主要实现方式 1. Pair/Triple 元组 用途:临时快速返回 2 或 3 个简单值,适用于简单场景语法: fun getStatus(): Pair<Int, String> {return Pair(200, "Success") // 等价于 200 to "Success" }// 解构接收 …...
Clojure 学习笔记
Clojure哲学 1.又一种Lisp? 优美、灵活、代码即数据。 实现一门程序设计语言,代码同数据一般对待,这需要语言本身具有非常强的可塑性。当语言就是以这种本质的数据结构表现时,语言本身就可以操作自己的结构和行为了。 2.函数式编…...
5.7 react 路由
react 状态管理库 14:20 react 路由(补充) 数据路由 路由hooks 路由跳转 (方法 标签/内置方法) 获取路由地址栏信息 动态路由实现(多角色权限路由) redux redux-toolkit 状态管理 antd 组件使用 1.…...
8. HTML 表单基础
表单是网页开发中与用户交互的核心组件,用于收集、验证和提交用户输入的数据。本文将基于提供的代码素材,系统讲解 HTML 表单的核心概念、常用控件及最佳实践。 一、表单的基本结构 一个完整的 HTML 表单由以下部分组成: <form action&q…...
遥感数据处理、机器学习建模与空间预测的全流程指南——涵盖R语言(随机森林、XGBoost、SVM等)、特征提取、模型优化及生态学案例分析
随机森林是一种强大的集成学习方法,特别适用于复杂的遥感数据分析。它通过构建多棵决策树并引入随机性,有效降低模型的方差和过拟合风险。在训练过程中,随机森林利用Bootstrap抽样生成多样化的训练集,并在节点分裂时随机选择特征子…...
Android 数据持久化之数据库存储 Room 框架
一、简介 Room 是 Google 推出的 Android 持久层框架,建立在 SQLite 之上,提供了一个抽象层,简化了数据库操作。它通过注解和编译时检查来确保数据操作的正确性。 Room 主要由以下三个组件组成: Entity(实体&#x…...
空间数据分析新趋势:AI 与 ArcGIS Pro 的协同创新
技术点目录 AI(DeepSeek、ChatGPT)大模型介绍及应用AI(DeepSeek、ChatGPT)支持下空间数据处理及分析功能基础AI(DeepSeek、ChatGPT)支持下空间数据选择及读取AI(DeepSeek、ChatGPT)支…...
Oracle OCP认证考试考点详解083系列10
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 46. 第46题: 题目 解析及答案: 查看以下配置: CDB1 和 CDB2 是两个容器数据库。 PDB1 是 CDB1 中的一…...