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

LeetCode Hot 100 | 滑动窗口专题(C++ 题解)

LeetCode Hot 100 | 滑动窗口专题C 题解滑动窗口是处理连续子数组/子字符串问题的核心技巧通过维护一个可变窗口来避免重复计算将 O(n²) 的暴力枚举优化到 O(n)。本文涵盖 LeetCode Hot 100 中 2 道经典滑动窗口题目配有图解和详细思路分析。目录LeetCode Hot 100 | 滑动窗口专题C 题解一、3. Longest Substring Without Repeating Characters无重复字符的最长子串 中等题目描述图解解题思路C 代码二、438. Find All Anagrams in a String找到字符串中所有字母异位词 中等题目描述图解解题思路C 代码总结一、3. Longest Substring Without Repeating Characters无重复字符的最长子串 中等题目描述给定一个字符串s请你找出其中不含有重复字符的最长子串的长度。示例 1输入: s abcabcbb 输出: 3 解释: 因为无重复字符的最长子串是 abc所以其长度为 3。示例 2输入: s bbbbb 输出: 1 解释: 因为无重复字符的最长子串是 b所以其长度为 1。示例 3输入: s pwwkew 输出: 3 解释: 因为无重复字符的最长子串是 wke所以其长度为 3。 注意你的答案必须是子串的长度pwke 是一个子序列不是子串。提示0 s.length 5 * 10^4s由英文字母、数字、符号和空格组成图解解题思路暴力思路枚举所有子串s[i..j]对每个子串检查是否有重复字符。双重循环枚举端点 O(n²)判断重复 O(n)总体 O(n³)显然超时。滑动窗口优化用left和right两个指针维护窗口[left, right]保证窗口内始终无重复字符。right不断右移扩展窗口当遇到重复字符时left右跳到重复字符上一次出现位置的下一个消除重复。用unordered_map记录窗口内每个字符最后出现的下标实现 O(1) 判断与跳转。当right移到字符c若map[c]存在且map[c] left说明c在当前窗口内left跳到map[c] 1否则直接扩展更新ans max(ans, right - left 1)关键细节left直接跳到map[c] 1而不是逐步右移——这是 O(n) 而不是 O(n²) 的核心所在。举例走一遍s abcabcbbright0a无重复窗口[0,0]ans1right1b无重复窗口[0,1]ans2right2c无重复窗口[0,2]ans3right3amap[a]0 ≥ left0left 跳到 1窗口[1,3]ans3right4bmap[b]1 ≥ left1left 跳到 2窗口[2,4]ans3right5cmap[c]2 ≥ left2left 跳到 3窗口[3,5]ans3right6bmap[b]4 ≥ left3left 跳到 5窗口[5,6]ans3right7bmap[b]6 ≥ left5left 跳到 7窗口[7,7]ans3最终 ans3正确整个过程right走了 8 步left最多也只走了 8 步每个字符最多访问两次O(n)。复杂度时间 O(n)空间 O(|Σ|)字符集大小最多 128C 代码classSolution{public:intlengthOfLongestSubstring(string s){unordered_mapint,intumap;intleft0;intans0;for(intright0;rights.size();right){umap[s[right]];while(umap[s[right]]1){umap[s[left]]--;left;}ansmax(ans,right-left1);}returnans;}};二、438. Find All Anagrams in a String找到字符串中所有字母异位词 中等题目描述给定两个字符串s和p找到s中所有p的字母异位词的子串返回这些子串的起始索引。不考虑答案输出的顺序。字母异位词指由相同字母重排列形成的字符串包括相同的字符串。示例 1输入: s cbaebabacd, p abc 输出: [0,6] 解释: 起始索引等于 0 的子串是 cba, 它是 abc 的字母异位词。 起始索引等于 6 的子串是 bac, 它是 abc 的字母异位词。示例 2输入: s abab, p ab 输出: [0,1,2] 解释: 起始索引等于 0 的子串是 ab, 它是 ab 的字母异位词。 起始索引等于 1 的子串是 ba, 它是 ab 的字母异位词。 起始索引等于 2 的子串是 ab, 它是 ab 的字母异位词。提示1 s.length, p.length 3 * 10^4s和p仅包含小写英文字母图解解题思路暴力思路枚举s中每个长度为len(p)的子串排序后与排序后的p比较。O(n·k log k)k len§当 n 和 k 都很大时很慢。固定窗口滑动和第 3 题的可变窗口不同这道题的窗口大小是固定的恰好等于p.length()。窗口从左向右滑动每次移入右侧一个新字符、移出左侧一个旧字符用字符频率数组判断当前窗口是否是p的字母异位词。如何快速判断「当前窗口 p 的字母异位词」维护两个频率数组cnt_p[26]p 的字符频率预处理一次和cnt_w[26]当前窗口的字符频率随滑动动态维护。每次滑动只更新一进一出两个字符O(1) 完成更新。判断相等时直接比较两个数组O(26) O(1)。进一步优化用差值计数代替数组比较。维护diff表示当前窗口与p有多少个字符的频率不同diff 0时即为异位词。每次滑动时移入新字符c_in若更新后cnt_w[c_in] cnt_p[c_in]diff–否则若更新前相等则 diff移出旧字符c_out同理这样每次滑动只需 O(1) 判断整体 O(n)。举例走一遍s cbaebabacd, p abclen3窗口[0,2] “cba”cnt_w{a:1,b:1,c:1} cnt_pdiff0✅ 记录 0窗口[1,3] “bae”移入 ‘e’移出 ‘c’diff≠0跳过窗口[2,4] “aeb”diff≠0跳过窗口[3,5] “eba”diff≠0跳过窗口[4,6] “bab”diff≠0跳过窗口[5,7] “aba”diff≠0跳过窗口[6,8] “bac”cnt_w{a:1,b:1,c:1} cnt_pdiff0✅ 记录 6窗口[7,9] “acd”diff≠0跳过结果 [0, 6]正确复杂度时间 O(n)空间 O(|Σ|) O(26)C 代码classSolution{public:vectorintfindAnagrams(string s,string p){arrayint,26cnt;vectorintans;for(autoc:p)cnt[c-a];intleft0;for(intright0;rights.size();right){cnt[s[right]-a]--;while(cnt[s[right]-a]0){cnt[s[left]-a];left;}if(right-left1p.size())ans.push_back(left);}returnans;}};总结题号题目难度窗口类型时间复杂度3无重复字符的最长子串 中等可变窗口 哈希表跳跃O(n)438找到字符串中所有字母异位词 中等固定窗口 频率差值计数O(n)滑动窗口的本质利用问题的单调性让左右指针各自只向右移动保证每个元素最多进出窗口一次从而将枚举所有子串的 O(n²) 降到 O(n)。可变窗口靠条件驱动 left 右移固定窗口则每步严格一进一出。如果这篇文章对你有帮助欢迎点赞收藏 ⭐也欢迎在评论区交流

相关文章:

LeetCode Hot 100 | 滑动窗口专题(C++ 题解)

LeetCode Hot 100 | 滑动窗口专题(C 题解) 滑动窗口是处理连续子数组/子字符串问题的核心技巧,通过维护一个可变窗口来避免重复计算,将 O(n) 的暴力枚举优化到 O(n)。本文涵盖 LeetCode Hot 100 中 2 道经典滑动窗口题目&#xff…...

ArduinoLog:面向MCU的零开销C++嵌入式日志框架

1. ArduinoLog 项目概述ArduinoLog 是一款专为 Arduino 及兼容嵌入式平台(包括 AVR、SAM、ESP8266 等)设计的轻量级 C 日志框架。其核心设计哲学是“零运行时开销、零动态内存分配、全编译期可控”,在资源极度受限的微控制器环境中&#xff0…...

UEFI SCT编译调试踩坑记:我的AARCH64环境搭建与问题解决实录

UEFI SCT编译调试实战:AARCH64环境搭建与疑难问题全解析 当你在深夜的办公室里盯着屏幕上闪烁的光标,第N次尝试编译UEFI SCT测试套件时,那种既熟悉又陌生的挫败感再次袭来。作为UEFI开发者,我们都经历过这样的时刻——官方文档看似…...

SEO_新手必看的SEO优化入门教程与常见误区

什么是SEO优化? SEO优化,全称搜索引擎优化,是指通过优化网站内容和结构,使其在搜索引擎(如百度、谷歌)中获得更高排名的一系列活动。SEO的目的是提高网站的自然流量,从而增加潜在客户和销售机会…...

Go语言中的Panic和Recover:错误处理的艺术

Go语言中的Panic和Recover:错误处理的艺术 1. Panic和Recover的基本概念 Panic和Recover是Go语言中用于处理异常情况的机制。Panic用于在程序遇到无法恢复的错误时终止程序,而Recover用于捕获Panic并恢复程序的正常执行。 Go语言的错误处理哲学是显式处理…...

TCC性能瓶颈到底卡在哪?:用Arthas+Metrics精准定位4大隐性耗时源并实测压降67%

第一章:TCC性能瓶颈到底卡在哪? TCC(Try-Confirm-Cancel)模式虽能保障分布式事务的强一致性,但其性能损耗远高于本地事务——根本原因并非网络延迟本身,而是其固有的三阶段协同机制与资源生命周期管理带来的…...

Seqlist 顺序表 的实现c语言

本小结重点: 你将学到 函数基础 传值传地址的区别结构体指针 简单循环控制 理解物理结构与存储结构的区别多文件分布 简单来说就是对动态数组进行函数封装,简化了很多功能所以很多就是对数组的利用,但更多是对结构体数组,所…...

Phi-4-mini-reasoning案例分享:用逻辑题测试模型对‘必要条件’的理解深度

Phi-4-mini-reasoning案例分享:用逻辑题测试模型对必要条件的理解深度 1. 模型能力定位 Phi-4-mini-reasoning是专为推理任务优化的文本生成模型,其核心优势在于处理需要多步逻辑推导的问题。与通用对话模型不同,它更擅长处理以下类型任务&…...

Super IO:提升Blender批量处理效率的自动化流程解决方案

Super IO:提升Blender批量处理效率的自动化流程解决方案 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D设计工作流中,设计师常常面临文件格式转换繁琐、跨…...

Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践

Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-op…...

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章:ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光 ZGC(Z Garbage Collector)以亚毫秒级停顿著称,但生产环境中频繁出现 10–50ms 甚至更高停顿,往往并非内存压力所致,而是源于几…...

【数据结构】树的定义、核心术语与关键性质全解析

在数据结构的世界里,树(Tree) 是一种极其重要的非线性结构,它完美模拟了自然界中树的层次关系,从文件系统、组织结构,到算法中的二叉搜索树、堆,再到 AI 中的决策树,树的身影无处不在…...

超级障碍马术联赛(PJL)正式启动,设立创纪录的3亿美元保底奖金池,开启障碍马术运动新纪元

• PJL助力骑手以全职职业运动员身份参赛,同时为这项运动构建可持续的经济模式。 • PJL由McCourt Global支持,核心管理团队拥有数十年马术赛事、体育和娱乐行业经验,为顶级障碍马术赛事树立全新、可持续且具备全球影响力的标准。 • 2027年3…...

软件实施交付转运维学习第三天:Linux系统命令基础(部分)

从实施到运维的蜕变之路,掌握命令就是掌握Linux的灵魂写在前面作为一名从软件实施交付转向运维的工程师,我深刻体会到:Linux命令不仅仅是简单的指令,更是与操作系统对话的语言。当我们站在实施和运维的交界处,掌握Linu…...

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机 1. 引言:AI手机助手的革命性突破 想象一下这样的场景:早上醒来,你只需要对手机说"帮我点一杯星巴克燕麦拿铁,加双份浓缩,送到公司&…...

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 在家庭网络管理中,你是否曾因…...

Axelspace 太空公司牵头联合体入选日本太空战略基金项目 “提升下一代地球观测卫星能力技术”

—— 通过卫星星座与航空器开展特定排放源二氧化碳排放与吸收监测,打造气候解决方案,开拓全新市场机遇 Axelspace 太空公司、明星电气株式会社、全日空控股株式会社及 JIJ 株式会社联合宣布,各方共同申报的技术研发项目成功入选日本宇宙航空…...

【linux】linux权限的详细讲解

一、Linux 权限的概念 1.1、用户分类 Linux下有两种用户:超级用户 (root) 与 普通用户超级用户:可以再linux系统下做任何事情,几乎不受权限的限制; 普通用户:在linux下做权限范围内的事情; 超级用户的命令提…...

【AI编程工具系列:第13篇】华为CodeArts与豆包MarsCode实战:企业级AI编程工具深度对比

摘要 本文全面对比分析华为CodeArts和豆包MarsCode两款企业级AI编程工具。华为CodeArts凭借三层融合架构(AI原生IDE集成层、代码智能体引擎层、Codebase语义索引系统层),在安全合规、信创兼容和私有化部署方面表现卓越,代码补全延…...

【读书笔记】《如何做到爱孩子也被孩子爱》

《如何做到爱孩子也被孩子爱》作者:法国著名心理学家(著有《你好,焦虑分子》)核心框架:爱、理性与逻辑 本书提出教养孩子的三大抓手,缺一不可: 爱 → 带来丰富情感与能量,让孩子将来…...

【读书笔记】《在远远的背后带领》

《在远远的背后带领》书话整理书名由来 "在远远的背后带领"这个书名,源于作者对十余年养育实践的回顾与思考。她发现,父母养育孩子容易走两个极端: 过度控制:强迫孩子按照自己的想法行事,结果双方俱疲&#…...

windows版vasp-6.5.1非Cygwin版

推荐使用oneapi版本,这个版本性能要好一点。 1.解压压缩包。 Gromacs&Vasp软.件.交.流:962946828 2.用VASP安装器添加系统环境变量(选择bin目录所在目录的父级目录)。 3.测试命令(在cmd或者powershell执行&#…...

Graphormer开源模型部署教程:3.7GB小模型+RTX4090一键启动分子建模服务

Graphormer开源模型部署教程:3.7GB小模型RTX4090一键启动分子建模服务 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个3.7GB的小模型在OG…...

2026年Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...

【人生底稿 03】2012 末日传说与我踏入 IT 的起点

接上《人生底稿》系列,本篇记录一段真实的成长碎片,不严格按时间线更新,只为记下一个农村少年,一步步走向社会的真实轨迹。 在参加某科技公司 ITMS 培训之前,我先经历了一轮面试 —— 上机题 技术面,分数…...

YOLOv8人脸检测实战:如何将WIDER Face数据集玩出新花样?结合OpenCV分类提升准确率

YOLOv8人脸检测实战:WIDER Face数据集与OpenCV分类的融合优化 人脸检测技术早已从实验室走向实际应用,但误检问题始终困扰着开发者。上周团队在商场部署的人脸统计系统,竟将广告牌上的明星照片全部计入客流——这种尴尬促使我们重新思考单阶段…...

BVH构建优化:四种分割算法在光线追踪中的性能对比

1. BVH分割算法基础概念 当你在玩3D游戏时,有没有想过为什么场景中的物体能够如此快速地渲染出来?这背后就离不开BVH(边界体积层次结构)技术的支持。简单来说,BVH就像是一个高效的"物体分类系统"&#xff0c…...

Git开源贡献全指南:从入门到精通

开源项目Git贡献全流程拆解 理解开源项目贡献的基本概念 开源项目的定义与意义Git在开源协作中的核心作用常见的开源贡献类型(代码、文档、测试等) 准备开发环境 安装Git并完成基础配置(用户名、邮箱、SSH密钥)注册GitHub/GitLab等…...

Docker 容器技术 第一节---定义、概念、安装CentOS 7 Linux系统、MobaXterm中安装docker-ce

一、Docker的定义Docker是一款开源的容器化平台,它能将应用及其依赖的环境、配置、库等打包成轻量可移植的容器,既保证了不同环境下应用运行的一致性,又以共享宿主机内核的方式实现了比传统虚拟机更高效的资源利用和秒级启动速度,…...

从特效 SDK 到 AI 动效平台:Neon Vibe Motion 的技术演进之路

多媒体中台在 B 站主要负责剪辑、拍摄、直播等业务场景的动效渲染,开发维护的 SDK 在后文统一称为特效 SDK。 传统的视频特效生产一般分三条链路: 三条链路存在一个困境:效果丰富度、实时可交互、生产效率,三者不可兼得。 那么能…...