leetcode hot100 3.无重复字符的最长子串 medium 滑动窗口(双指针)

核心思想:滑动窗口(双指针)

维护一个区间:

python 复制代码
[left ...... right]

这个区间 始终保证:没有重复字符

遍历规则

right 向右扩展

如果 sright 没出现过,扩大窗口,更新最大长度

如果 sright 已经在窗口里,缩小 left(直到sright 不在窗口里)

直到重复字符被移出

python 复制代码
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if not s:
            return 0

        left = 0
        max_len = 0

        for right in range(len(s)):
            # 检查是否有重复
            while s[right] in s[left:right]:   # 有重复的就右移左指针,直到没有重复的
                left += 1

            max_len = max(max_len, right - left + 1)

        return max_len

时间复杂度 O(n)

in 操作的成本:

while sright in sleft:right 的操作虽然看起来是 O(n) 的操作(因为它在 left:right 的子串上查找),但由于每个字符的 left 和 right 只移动一次,in 操作的时间成本不会累积成 O(n²)。它们是分散的,所以总的时间复杂度是 O(n)。

空间复杂度: O(1)

除了输入字符串 s 外,程序只使用了两个额外的变量:left 和 max_len,它们都占用常量空间。

相关推荐
张小凡vip31 分钟前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
毕业设计7031 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
xifangge20251 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板
java·vue.js·python
大草原的小灰灰1 小时前
Python基础语法
开发语言·python
小葱炖豆腐3 小时前
python绘制excel折线图
python·excel·numpy·pandas·matplotlib
Ticnix3 小时前
MCP 实战:把工具层从 Agent 里彻底解耦
python·mcp
a187927218313 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记3 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z4 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
XZ-0700014 小时前
week4-1-figure画布
python