新闻详情

新闻详情

首页 / 资讯中心 / 详情

双指针在滑动窗口中的收缩博弈:无重复字符最长子串的指针进退法则

发布时间:2026/9/4 23:23:46来源:尧图网络
双指针在滑动窗口中的收缩博弈:无重复字符最长子串的指针进退法则
双指针在滑动窗口中的收缩博弈无重复字符最长子串的指针进退法则在双指针算法体系中“滑动窗口Sliding Window”是解决连续子串、连续子数组极值问题最锋利的武器。经典题目如 LeetCode 3无重复字符的最长子串、LeetCode 76最小覆盖子串和 LeetCode 209长度最小的子数组。很多同学在写滑动窗口时最容易写成“嵌套循环 乱回退指针”导致原本 $O(N)$ 的线性算法直接退化为 $O(N^2)$甚至在left和right指针的交错位置上产生数组越界。今天我们通过状态机模型与进退博弈法则把无重复字符最长子串的滑动窗口模板彻底讲透。滑动窗口的核心本质单调指针与双向收敛滑动窗口之所以能将 $O(N^2)$ 的枚举降维到 $O(N)$关键在于两个指针left和right都单调向右移动绝不走回头路。整个算法的运行过程就像一个可伸缩的贪吃蛇主动扩张阶段right向右前进不断将右边界元素纳入窗口扩大窗口内的有效信息量被动收缩阶段left向右追赶当窗口内的状态违反了题目约束例如出现了重复字符、或者窗口和超过了限制右指针暂停移动左指针向右移动逐个剔除左侧元素直到窗口重新恢复合法状态极值更新阶段在每次合法状态下动态计算并更新全局最值如maxLen Math.max(maxLen, right - left 1)。graph LR A[right 持续右移吸纳字符] -- B{窗口内是否存在重复字符?} B --|是 违反约束| C[left 持续右移移出字符直到无重复] B --|否 恢复合法| D[更新 maxLen 并继续右移 right] C -- D标准代码实现基于哈希表与数组映射的高效滑动在处理 ASCII 字符集包括字母、数字、符号时直接使用固定大小为 128 或 256 的int[]数组作为哈希计数器性能比java.util.HashMap快 5 倍以上因为完全消除了对象装箱拆箱与哈希冲突链表遍历开销。public class LongestSubstringWithoutRepeating { public int lengthOfLongestSubstring(String s) { if (s null || s.isEmpty()) { return 0; } // 使用 128 大小的整型数组记录字符最后一次出现的下标位置 int[] lastIndex new int[128]; Arrays.fill(lastIndex, -1); // 初始化为 -1 表示未出现 int maxLen 0; int left 0; // 窗口左边界 for (int right 0; right s.length(); right) { char c s.charAt(right); // 如果当前字符在窗口内出现过直接将 left 指针跳跃到重复字符的下一个位置 if (lastIndex[c] left) { left lastIndex[c] 1; } // 更新字符最新出现的下标 lastIndex[c] right; // 维护全局最大长度 maxLen Math.max(maxLen, right - left 1); } return maxLen; } }极客进阶为什么lastIndex[c] left是绝对不可省略的判断很多初学者直接写left lastIndex[c] 1结果在字符串abba用例上直接挂掉。让我们单步推演abbaright 0,c a,lastIndex[a] 0,left 0, 窗口a,maxLen 1right 1,c b,lastIndex[b] 1,left 0, 窗口ab,maxLen 2right 2,c b, 发现b出现过left跳跃到lastIndex[b] 1 2窗口变为b,maxLen 2right 3,c a:此时哈希表记录的lastIndex[a] 0如果不加lastIndex[c] left判断left会被错误地赋值为0 1 1这会导致原本已经在窗口外部的a导致left指针发生回退从 2 倒退回 1使得窗口包含了ba从而产生错误判断lastIndex[c] left这一道防线确保了左指针只能单向向右跳跃绝对不会被历史已出窗的过期字符拉回。复杂度分析与总结时间复杂度每个字符最多被right访问一次被left跳跃排除一次严格为 $O(N)$空间复杂度由于 ASCII 字符集常数大小为 128空间复杂度严格为 $O(1)$。掌握了“进窗、破界、出窗、判界”四部曲滑动窗口问题便能做到心中有图、落笔生花。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

为什么美国律师一开口,就要你的销售数据? 2026/9/5 2:09:20

为什么美国律师一开口,就要你的销售数据?

知产纠纷数据应对指南 Guide to Handling Data Requests in US IP Disputes “ 跨境卖家收美国知产律师函,别轻易交销售数据!这是对方在评估案件价值、谈判空间。不同阶段披露策略不同,要先辨风险,有边界沟通,避免误判…

阅读更多 →
测速站如何对接家宽节点?DNSPup API、节点调度与结果展示方法 2026/9/5 2:09:20

测速站如何对接家宽节点?DNSPup API、节点调度与结果展示方法

背景 一个测速站如果只有几个云主机探针,往往只能反映数据中心视角。普通用户使用的是家庭宽带,网络路径更复杂,运营商之间也存在明显差异。DNSPup 提供 API 对接能力,并拥有 300 家宽测速节点,适合将家宽样本接入已有…

阅读更多 →
从零实现一个 Android AI Agent:ReAct + Function Calling 实战 2026/9/5 2:09:20

从零实现一个 Android AI Agent:ReAct + Function Calling 实战

从零实现一个 Android AI Agent:ReAct Function Calling 实战 本文配套开源项目:AI Agent Demo(Apache 2.0 协议) 技术栈:Kotlin Jetpack Compose MVVM Retrofit DeepSeek API 一、为什么要在手机上做 AI Agent …

阅读更多 →
硬件设计笔记:1μH功率电感选型实战——线艺 XFL4020-102MEC 与 国产 pin to pin MVLH4020-1R0M 详细参数测评 2026/9/5 2:09:20

硬件设计笔记:1μH功率电感选型实战——线艺 XFL4020-102MEC 与 国产 pin to pin MVLH4020-1R0M 详细参数测评

在嵌入式硬件设计中,DC-DC电源部分的电感选型往往决定了项目的成败。最近在评估一个12V转3.3V的Buck电路,手头有两款可选的1μH、4020封装(4x4mm)的屏蔽电感:Coilcraft XFL4020-102MEC和TONEVEE MVLH4020-1R0M。两者引…

阅读更多 →
中电金信连续九年位居IDC中国银行业IT解决方案市场第一:源启与AI如何构筑长期竞争力 2026/9/5 2:09:20

中电金信连续九年位居IDC中国银行业IT解决方案市场第一:源启与AI如何构筑长期竞争力

中电金信连续九年位居IDC中国银行业IT解决方案市场第一,并非单一产品驱动,而是核心系统、数据智能、业务解决方案、工程交付与AI能力长期积累的结果。以“源启”为代表的数字基础设施,以及智能体、AI原生软件研发和本体驱动的数据智能&#x…

阅读更多 →
SpringBoot宿舍维修管理系统:从零构建企业级Java Web应用实战 2026/9/5 2:06:20

SpringBoot宿舍维修管理系统:从零构建企业级Java Web应用实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞