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
相关推荐
Laravel技术社区几秒前
python3 部署内网离线项目(无网环境)
python
by__csdn1 分钟前
ES6新特性全攻略:JavaScript的现代革命
开发语言·前端·javascript·typescript·ecmascript·es6·js
别叫我->学废了->lol在线等2 分钟前
model_validator的mode=“before“
python
foxsen_xia2 分钟前
go(基础10)——错误处理
开发语言·后端·golang
robch3 分钟前
Java后端优雅的实现分页搜索排序-架构2
java·开发语言·架构
她说..3 分钟前
在定义Java接口参数时,遇到整数类型,到底该用int还是Integer?
java·开发语言·java-ee·springboot
高洁015 分钟前
卷积神经网络(CNN)详细介绍及其原理详解(3)
python·神经网络·机器学习·transformer
程序员-King.8 分钟前
day110—同向双指针(数组)—最多K个重复元素的最长子数组(LeetCode-2958)
算法·leetcode·双指针
Evand J9 分钟前
【PSINS进阶例程】雷达三维跟踪与EKF轨迹滤波。带坐标转换,观测为斜距、方向角、俯仰角。MATLAB编写,附下载链接
开发语言·matlab·psins·雷达观测
专业开发者14 分钟前
Android 位置服务(LBS)客户支持指南
开发语言·php