LeetCode 算法 3.无重复字符的最长子串(python版)

1.需求

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

#输入: s = "pwwkew"

#输出: 3

#解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

#请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

2.代码

python 复制代码
class Solution:
    def length_substring(self, str):
        # 如果字符串为空,直接返回0
        if not str:
            return 0
        # 定义一个变量,用来指向字符串最左边的元素,用于删除
        left = 0
        # 定义一个集合,用于存储子字符串(集合中不允许有重复值)
        str_child = set()
        # 获取当前字符串长度
        n = len(str)
        # 定义子串的最大长度
        max_len = 0
        # 定义当前遍历长度
        cur_len = 0
        for i in range(n):
            cur_len += 1
            # 如果当前字符在子串集合中,移除当前子串的最左边的元素
            # 同时将指向最左边的变量+1,将当前长度变量-1
            while str[i] in str_child:
                str_child.remove(str[left])
                left += 1
                cur_len -= 1
            # 如果当前长度大于子串的最大长度,将最大长度=当前长度
            if cur_len > max_len:
                max_len = cur_len
            # 将遍历到的字符加入到子串集合中
            str_child.add(str[i])
        return max_len

if __name__ == '__main__':
    res=Solution()
    str='pwwkew'
    index=res.length_substring(str)
    print(index)

3.分析

python 复制代码
    # 解析:
    # 1. cur_len=1 -> p不在set()中 -> max_len=1 -> set(p)
    # 2. cur_len=2 -> w不在set(p)中 -> max_len=2 -> set(pw)
    # 3. cur_len=3 -> w在set(pw)中 -> set(w) -> left=1 -> cur_len=2
    # 4. cur_len=2 -> k不在set(w)中 -> set(wk)
    # 5. cur_len=3 -> e不在set(wk)中 -> max_len=3 -> set(wke)
    # 6. cur_len=4 -> w在set(wke)中 -> set(ke) -> left=1 -> cur_len=3
    # 7.循环结束 max_len=3

4.运行结果

相关推荐
AsDuang9 分钟前
Python 3.12 MagicMethods - 28 - __rsub__
开发语言·python
Σίσυφος190022 分钟前
PCL聚类 之 欧式聚类(最常用)
算法·机器学习·聚类
李可以量化27 分钟前
用 KMeans 聚类寻找股票支撑位与压力位(上):基于 QMT 量化平台实现
python·量化 qmt ptrade
所谓伊人,在水一方33329 分钟前
【Python数据科学实战之路】第12章 | 无监督学习算法实战:聚类与降维的奥秘
python·sql·学习·算法·信息可视化·聚类
MoRanzhi120335 分钟前
Pillow 灰度化、二值化与阈值处理
图像处理·python·pillow·二值化·图像预处理·阈值处理·灰度化
像素猎人37 分钟前
数据结构之顺序表的插入+删除+查找+修改操作【主函数一步一输出,代码更加清晰直观】
数据结构·c++·算法
飞Link1 小时前
告别复杂调参:Prophet 加法模型深度解析与实战
开发语言·python·数据挖掘
测试人社区—66791 小时前
当代码面临道德选择:VR如何为AI伦理决策注入“人性压力”
网络·人工智能·python·microsoft·vr·azure
季明洵1 小时前
二叉树的最小深度、完全二叉树的节点个数、平衡二叉树、路径总和、从中序与后序遍历序列构造二叉树
java·数据结构·算法·leetcode·二叉树
独行soc1 小时前
2026年渗透测试面试题总结-36(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮