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

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

维护一个区间:

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

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

遍历规则

right 向右扩展

如果 s[right] 没出现过,扩大窗口,更新最大长度

如果 s[right] 已经在窗口里,缩小 left(直到s[right] 不在窗口里)

直到重复字符被移出

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

空间复杂度: O(1)

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

相关推荐
chushiyunen1 天前
python chatTts实现tts文本转语音、音频
python
FreakStudio1 天前
把 Flask 搬进 ESP32,高中生自研嵌入式 Web 框架 MicroFlask !
python·单片机·嵌入式·cortex-m3·异步编程·电子diy
love530love1 天前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
chushiyunen1 天前
python中的内置属性 todo
开发语言·javascript·python
2301_793804691 天前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
Hommy881 天前
【开源剪映小助手】IPC 通信机制
python·开源·aigc·剪映小助手
Zaly.1 天前
【Python刷题】LeetCode 1727 重新排列后的最大子矩阵
算法·leetcode·矩阵
Zhansiqi1 天前
dayy43
pytorch·python·深度学习
紫丁香1 天前
pytest_自动化测试3
开发语言·python·功能测试·单元测试·集成测试·pytest
杰杰7981 天前
Python面向对象——类的魔法方法
开发语言·python