Python闯LeetCode--第3题:无重复字符的最长子串

Problem: 3. 无重复字符的最长子串

文章目录

思路

一上来马上想到两层for循环暴力枚举,但是又立马想到复杂度是 O ( n 2 ) O(n^2) O(n2),思考了一下能否有更优解,于是想到用头尾两个指针来指定滑动窗口(主要是python的字符串可作为字符列表来操作,用头尾两个指针的列表索引来提取子串很方便)

解题方法

1、首先考虑特殊情况,字符串长度为0或为1,则直接返回字符串长度num_char

2、设置一个变量max_son来记录最长子串长度

3、设立头尾两个指针i、j,初始值都为0,用来提取子串以滑动窗口

4、当j指向的下一个字符不在目前的子串中,即可以形成新的不重复子串,则j+1,且如果超过最大子串长度,则更新max_son的值

5、当j指向的下一个字符出现重复,则i+1,用新的头指针来遍历

6、直到j到达字符串末端,则停止

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

python 复制代码
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        num_char = len(s)
        if num_char <= 1:
            return num_char
        max_son = 1
        i, j = 0, 0
        while j < num_char-1:
            str_son = s[i:j+1]
            if s[j+1] not in str_son:
                if len(str_son)+1 > max_son:
                    max_son = len(str_son)+1
                j += 1
            else:
                i += 1
                j = i
        return max_son
相关推荐
終不似少年遊*几秒前
国产之光DeepSeek架构理解与应用分析04
人工智能·python·深度学习·算法·大模型·ds
碎梦归途4 分钟前
23种设计模式-结构型模式之外观模式(Java版本)
java·开发语言·jvm·设计模式·intellij-idea·外观模式
杰杰批6 分钟前
力扣热题100——矩阵
算法·leetcode·矩阵
明月看潮生9 分钟前
青少年编程与数学 02-016 Python数据结构与算法 28课题、图像处理算法
图像处理·python·算法·青少年编程·编程与数学
muyouking1121 分钟前
4.Rust+Axum Tower 中间件实战:从集成到自定义
开发语言·中间件·rust
羊小猪~~43 分钟前
深度学习基础--CNN经典网络之InceptionV3详解与复现(pytorch)
网络·人工智能·pytorch·python·深度学习·机器学习·cnn
FAREWELL000751 小时前
C#进阶学习(九)委托的介绍
开发语言·学习·c#·委托
深度学习lover1 小时前
<项目代码>YOLO小船识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·小船识别
我该如何取个名字1 小时前
Mac配置Java的环境变量
java·开发语言·macos
kkkkatoq1 小时前
Java中的锁
java·开发语言