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

最长无重复子串:从暴力到最优,AI 的直觉进化链

读完本文你将了解:最长无重复子串的核心解法 | 暴力→滑动窗口的优化演进 | 面试官想看到的边界处理


📋 题目

原题:给定一个字符串 s,找出其中不含有重复字符的最长子串的长度。

项目说明
输入s = “abcabcbb”
输出3
解释“abc” 长度 3,是无重复字符的最长子串
约束0 ≤ s.length ≤ 5×10⁴,s 由英文字母、数字、符号和空格组成

💡 先问一个问题

ChatGPT 第一次写这道题会怎么写?不是哈希表,不是滑动窗口——先写一个双层循环。AI 的第一版代码暴露了最自然的思维方式,也恰恰是我们要优化的起点。

🤖 第一版:AI 的朴素解法(暴力枚举)

deflength_of_longest_substring(s:str)->int:max_len=0foriinrange(len(s)):seen=set()forjinrange(i,len(s)):ifs[j]inseen:breakseen.add(s[j])max_len=max(max_len,j-i+1)returnmax_len

外层遍历每个起始位置,内层从当前位置往后找,遇到重复字符停下来,记录当前最大长度。

复杂度:时间 O(n²) 空间 O(min(m, n))

问题:每次外层 i 递增,内层 j 又从头扫——大量重复计算。

🧠 AI 的自我优化

问 AI “能不能更快”,它的思考链:

  • 第 1 次:内层很多工作是重复的——j 遇到重复字符时,i 没必要只+1 再从头扫,可以"跳"到重复位置的下一个
  • 第 2 次:用哈希表记录字符上次出现的位置,i 直接跳跃,不需要内层循环重新构建 set
  • 最终版:双指针滑动窗口,左指针只在必要时移动,右指针一直往前走

暴力枚举
O(n²)

滑动窗口
O(2n)

哈希优化滑动窗口
O(n)

最终版代码

deflength_of_longest_substring(s:str)->int:char_index={}# 字符 -> 最近出现位置left=0max_len=0forright,chinenumerate(s):ifchinchar_indexandchar_index[ch]>=left:# 遇到重复字符,左指针跳到重复位置的下一个left=char_index[ch]+1char_index[ch]=right max_len=max(max_len,right-left+1)returnmax_len

复杂度:时间 O(n),空间 O(min(m, n))——每个字符最多被访问两次

核心洞察:右指针永不回退,左指针只在必要时跳跃。

☕ Java 实现

publicintlengthOfLongestSubstring(Strings){Map<Character,Integer>charIndex=newHashMap<>();intleft=0,maxLen=0;for(intright=0;right<s.length();right++){charch=s.charAt(right);if(charIndex.containsKey(ch)&&charIndex.get(ch)>=left){left=charIndex.get(ch)+1;}charIndex.put(ch,right);maxLen=Math.max(maxLen,right-left+1);}returnmaxLen;}

CSDN 第一大用户群体是 Java 开发者。两版代码摆在一起对比,比讲十句话都有用。

🔍 算法模式拆解

这题属于滑动窗口(Sliding Window)模式。

什么时候用滑动窗口?

  • 问题涉及连续子数组/子串
  • 需要在 O(n) 时间内处理
  • 窗口的扩展和收缩有明确的条件判断

滑动窗口模板

defsliding_window(s):left=0result=0window={}# 或 set/counterforright,chinenumerate(s):# 扩展窗口window[ch]=window.get(ch,0)+1# 收缩窗口(条件不满足时)while需要收缩的条件:window[s[left]]-=1left+=1# 更新结果result=max(result,right-left+1)returnresult

同类问题

  • 至多包含 K 个不同字符的最长子串
  • 最小覆盖子串
  • 无重复字符的最长子串(本题)
  • 字符串的排列

🏗️ 真实产品场景

你在用 Slack 看团队消息。频道里消息在滚动,你关注的是最近的消息流中有没有重复的发送者

Slack 的"未读消息摘要"功能,需要从最近的 N 条消息中提取不重复的发送者列表——这就是滑动窗口。

是,左指针跳到
第一个 Alice 之后

否,继续扩展

消息流
[Alice, Bob, Alice, Charlie, Bob, Dave]

窗口从 Alice 开始

遇到重复 Alice?

窗口: [Bob, Alice, Charlie, Bob, Dave]

继续右移

遇到重复 Bob?
左指针跳跃

窗口: [Alice, Charlie, Bob, Dave]

不只是 Slack——任何需要处理连续数据流中的不重复模式的场景:

  • 网络流量分析:检测最近的数据包中是否有重复源地址
  • 日志去重:实时日志流中提取最近 N 条唯一错误码
  • 股票交易:最近 K 笔交易中不重复的股票代码

✅ 面试官的点评

答到什么算通过?

级别标准
基础(暴力解)写出 O(n²) 解法,能分析复杂度
良好(滑动窗口)写出 O(2n) 版本,解释清楚左右指针的作用
优秀(哈希优化)写出 O(n) 版本,左指针直接跳跃,处理边界正确
加分能扩展到「至多 K 个不同字符」的变体

常见坑

  1. 忘了char_index[ch] >= left——字符虽然出现过,但已经不在当前窗口内
  2. 空字符串 s = “”——返回 0 不是 None
  3. 全是相同字符 “bbbbb”——正确返回 1

加分细节

  • 字符集大小有限(ASCII 128 个),可以用数组代替哈希表进一步优化空间
  • 主动问面试官"字符串的字符集范围是多少?"

📊 同类题推荐

题目难度一句话思路
至多包含 K 个不同字符的最长子串Medium窗口内维护不同字符计数,超过 K 时左指针收缩
最小覆盖子串Hard先扩展找到所有目标字符,再收缩找最小
字符串的排列Medium固定窗口大小=目标串长度,滑动比较字符计数

来源说明

  • ✅ 已验证:LeetCode 官方题解 + Python/Java 实测
  • ✅ 已验证:产品场景源自 Slack、网络流量分析等真实用例
http://www.jsqmd.com/news/1187922/

相关文章:

  • 雷达中国区官方售后服务中心|最新网点地址及官网热线权威公布(2026年7月最新) - 亨得利客户服务中心
  • 2026西安钻石回收常见问题解答:4C证书怎么算价?易奢福78店专业估价 - ys韩
  • Demo 跑得欢,上线就炸锅:普通程序员在大模型时代的生存真相
  • Axure RP中文界面终极指南:三分钟让英文原型工具变中文
  • 计算机毕业设计之基于springboot的教学辅助平台
  • # 2026北京闲置奢侈品包包回收真实测评|实体店行情透析与高效变现指南 - 名表行情观察
  • Bilibili World现场,NVIDIA祭出史上最夯“轻薄本”RTX Spark
  • GitHub加速终极指南:3分钟解决国内访问GitHub缓慢的完整方案
  • 终极指南:Snap Hutao - 免费开源的原神Windows工具箱,让你的游戏体验提升300%
  • 告警和数据监控系统
  • Word文档自动化——Apache POI实战指南
  • 亨得利中 国官方售后服务体系全解析|官方网站权威公示(2026年7月最新) - 亨得利客户服务中心
  • 2026年7月亲身探访福州亨得利官方名表服务中心|全部地址与售后服务电话 - 亨得利官方
  • javascript思维导图(更新中)
  • 第四十五篇,杂记(五)
  • 代理记账财税服务获客闭环:先用BBWEYY搭建小程序再做GEO,全程零代码,BBWEYY:AI+SAAS+GEO模式
  • 2026木作定制口碑TOP品牌,选这些准没错 - 小张小张111
  • YimMenu技术故障排除:从编译注入到功能异常的完整解决方案
  • VC++ GDI实现DDA与Bresenham画线、中点画圆算法详解
  • ChatGPT对话模拟实战指南:7步构建个性化训练场景,覆盖职场/面试/外语/心理四大刚需场景
  • 如何快速诊断硬盘问题:DiskInfo硬盘健康监控工具终极指南
  • 电力-IEC 60870-5-101规约说明书2
  • 上海芝柏中国官方售后服务网点|官方网站权威认证(2026年7月最新) - 亨得利客户服务中心
  • ONNX模型库完全指南:一站式获取预训练AI模型的终极方案
  • ChatGPT答疑辅助上线72小时内必做的12项安全加固动作——错过第9项将触发审计红线
  • 5个技巧彻底改变macOS鼠标体验:Mac Mouse Fix终极配置指南
  • 法律文书生成翻车现场全记录(含法院驳回裁定书原文),ChatGPT幻觉风险量化评估表限时领取
  • 2024-12月期末考试-实验一:华为ensp交换机vlan间通信、ospf基础配置、单臂路由配置
  • 2026岩棉毡主流厂家实测排行 推荐廊坊展创 - 起跑123
  • 3步搞定:Mac完美读写NTFS硬盘的完整指南