新闻详情

新闻详情

首页 / 资讯中心 / 详情

滑动窗口算法:高效解决无重复字符最长子串问题

发布时间:2026/10/28 14:14:09来源:尧图网络
滑动窗口算法:高效解决无重复字符最长子串问题
1. 问题背景与核心挑战字符串处理是算法领域的经典问题类型而寻找无重复字符的最长子串更是面试中的高频考点。这道题看似简单却涵盖了滑动窗口、哈希表等关键算法思想是检验程序员基础能力的试金石。在实际工作中类似场景比比皆是文本编辑器需要检测重复输入数据清洗要识别异常字符序列网络安全领域要分析恶意代码的特征片段。掌握这个算法相当于获得了一把解决多种实际问题的钥匙。2. 暴力解法与优化思路2.1 最直观的暴力枚举新手最容易想到的方法是检查所有可能的子串def lengthOfLongestSubstring(s: str) - int: n len(s) res 0 for i in range(n): for j in range(i1, n1): if len(set(s[i:j])) j-i: res max(res, j-i) return res这种双重循环的时间复杂度是O(n²)当字符串长度超过10⁴时就会超时。我在第一次尝试时就被这个陷阱卡住直到看到超时提示才意识到问题。2.2 滑动窗口的引入观察发现当发现重复字符时左指针可以直接跳到重复字符的下一个位置。这就是滑动窗口Sliding Window的雏形def lengthOfLongestSubstring(s: str) - int: char_index {} left res 0 for right, char in enumerate(s): if char in char_index and char_index[char] left: left char_index[char] 1 char_index[char] right res max(res, right - left 1) return res这个版本将时间复杂度降到了O(n)空间复杂度O(min(m,n))其中m是字符集大小。3. 实现细节与边界处理3.1 哈希表的选用使用字典记录字符最后出现的位置是关键。我对比过用defaultdict和普通字典defaultdict代码更简洁但稍慢普通字典需要先做in判断但性能更好实际测试发现差异不大选择更易读的实现即可。3.2 边界条件大全这些case必须测试空字符串() → 0全相同字符(aaaaa) → 1无重复字符(abcde) → 字符串长度混合情况(pwwkew) → 3Unicode字符(你好你好) → 24. 算法变种与扩展4.1 返回最长子串本身面试常问的变种题def longestUniqueSubstr(s): char_index {} left max_len start 0 for right, char in enumerate(s): if char in char_index and char_index[char] left: left char_index[char] 1 char_index[char] right if right - left 1 max_len: max_len right - left 1 start left return s[start:startmax_len]4.2 允许k次重复的扩展更复杂的变体需要维护出现次数的统计from collections import defaultdict def lengthOfLongestSubstringKDistinct(s: str, k: int) - int: count defaultdict(int) left res 0 for right, char in enumerate(s): count[char] 1 while len(count) k: left_char s[left] count[left_char] - 1 if count[left_char] 0: del count[left_char] left 1 res max(res, right - left 1) return res5. 性能优化实战技巧5.1 使用数组替代哈希表当字符集已知且较小时如ASCII用数组更快def lengthOfLongestSubstring(s: str) - int: last_index [-1] * 128 # ASCII字符集 left res 0 for right, char in enumerate(s): left max(left, last_index[ord(char)] 1) res max(res, right - left 1) last_index[ord(char)] right return res5.2 早期终止优化当剩余长度不可能超过当前最大值时提前退出def lengthOfLongestSubstring(s: str) - int: char_index {} left res 0 for right, char in enumerate(s): if char in char_index and char_index[char] left: left char_index[char] 1 char_index[char] right res max(res, right - left 1) # 提前终止判断 if res len(s) - left: break return res6. 实际工程中的应用场景文本编辑器检测用户输入中的重复模式生物信息学寻找DNA序列中的独特片段日志分析识别异常请求的特征字符串数据压缩寻找可重复利用的字符串模式在实现HTTP服务器的路由匹配时我就用到了类似的算法来优化路径匹配的性能。理解这个算法的本质后可以灵活应用到各种需要检测或利用唯一性特征的场景中。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/28 16:06:12

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/28 13:44:36

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/28 6:32:58

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/28 16:06:11

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/28 11:07:30

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/28 16:06:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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