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

算法3. 无重复字符的最长子串

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

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。
class Solution:def lengthOfLongestSubstring(self, s: str) -> int:ans = left = 0cnt = defaultdict(int)  # 维护从下标 left 到下标 right 的字符及其出现次数for right, c in enumerate(s):cnt[c] += 1while cnt[c] > 1:  # 窗口内有重复字母cnt[s[left]] -= 1  # 移除窗口左端点字母,直到剔除重复字母(cnt[c]==1)left += 1  # 缩小窗口ans = max(ans, right - left + 1)  # 更新窗口长度最大值return ans

 

✅ 解法使用了「滑动窗口 + 双指针」

1. 双指针(Two Pointers)
  • 使用了两个指针:
    • left:指向当前窗口的左边界。
    • right:通过 for right, c in enumerate(s) 遍历字符串,作为右指针。
  • 两个指针共同维护一个动态变化的子串区间 [left, right]
2. 滑动窗口(Sliding Window)
  • 窗口 [left, right] 表示当前考察的子串。
  • 每次 right 向右移动一位,加入一个新字符 c
  • 如果加入后导致字符重复(cnt[c] > 1),就不断移动 left 指针,缩小窗口,直到重复字符被移出,恢复“无重复”状态。
  • 这样窗口始终维持一个不含重复字符的合法子串,并不断尝试扩展和滑动。
3. 哈希表辅助判断重复
  • cnt = defaultdict(int) 用来统计当前窗口中每个字符的出现次数。
  • 用于快速判断是否出现重复字符。
4. 更新答案
  • 每当窗口合法时(即无重复),用 right - left + 1 更新最大长度。

http://www.lryc.cn/news/610712.html

相关文章:

  • Django中的转发与重定向详解
  • Boosting 知识点整理:机制、对比与应用场景
  • 统计鱼儿分布情况 Java
  • 复制网页文字到Word、WPS文字?选中后直接拖放
  • C语言线程同步详解(互斥锁、信号量、条件变量和读写锁)
  • Apache OFBiz Scrum 组件命令注入漏洞
  • FLAN-T5:大规模指令微调的统一语言模型框架
  • C++(线程)
  • 恶魔轮盘赌
  • Java Date类介绍
  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • 利用m0改造循迹模块处理笔记00
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在火焰识别的落地优化
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • Linux 系统启动原理2
  • 2025年服务器漏洞生存指南:从应急响应到长效免疫的实战框架
  • Pandas query() 方法详解
  • 防水防尘防摔性能很好的智能三防手机,还有22000mAh大电池
  • 手机通话检测数据集介绍-3,100 张图片 智能监控系统 驾驶安全监控
  • 联发科芯片组曝高危漏洞:越界写入缺陷危及智能手机与物联网设备安全
  • Tasks and Deadlines(Sorting and Searching)
  • 云手机和实体手机之间的区别
  • 【springcloud的配置文件不生效】
  • AI的第一次亲密接触——你的手机相册如何认出你的猫?
  • 深入浅出 RabbitMQ-交换机详解与发布订阅模型实战
  • 华为云云产品的发展趋势:技术创新驱动数字化未来
  • 查看部署在K8S服务的资源使用情况
  • 蓝桥杯----DS1302实时时钟
  • Could not load the Qt platform plugin “xcb“ in “无法调试与显示Opencv
  • 【升级打怪实录】uniapp - android 静态声明权限和动态请求权限的区别