最长无重复子串

无重复字符的最长子串

这个问题两个思路,要么进行遍历暴力破解,要么进行滑动窗口(巧妙),下面先看一下暴力解法:

复制代码
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:

        s_count = len(s)

        max_list = []
        if s_count == 0:
            return 0
        else:
            # 两层的遍历 
            for i in range(s_count):
                tmp = s[i]
                max_list.append(tmp)
                for j in range(i+1, s_count):
                    tmp += s[j]
                    max_list.append(tmp)
            # 然后用set 判断子串是否有重复
            return max([len(i) for i in max_list if len(set(list(i))) == len(i)])

这个时间复杂度是N方,下面看一下滑动窗口的解法,我来一个left和right,然后用right遍历,如果有重复子串,我就删除left,知道没有重复为止,这个思路太可以了。

复制代码
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:

        left = 0

        s_len = len(s)
        max_count = 0
        # 用set 来记录最长无重复子串
        max_set = set()
        # right 遍历 s
        for right in range(s_len):
            # 如果在set 中 我就删除左边的 直到没有重复为止
            while s[right] in max_set:
                max_set.remove(s[left])
                left += 1
            max_set.add(s[right])

            max_count = max(max_count, right - left + 1)
        return max_count

滑动窗口的时间复杂度是O(N),提高不少。

相关推荐
kupeThinkPoem13 分钟前
跳表有哪些算法?
数据结构·算法
前端小L22 分钟前
图论专题(二十一):并查集的“工程应用”——拔线重连,修复「连通网络」
数据结构·算法·深度优先·图论·宽度优先
88号技师33 分钟前
2025年9月一区SCI-孤行尺蠖觅食优化算法Solitary Inchworm Foraging-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
前端小L1 小时前
图论专题(二十五):最小生成树(MST)——用最少的钱,连通整个世界「连接所有点的最小费用」
算法·矩阵·深度优先·图论·宽度优先
前端小L1 小时前
图论专题(二十三):并查集的“数据清洗”——解决复杂的「账户合并」
数据结构·算法·安全·深度优先·图论
CoovallyAIHub1 小时前
破局红外小目标检测:异常感知Anomaly-Aware YOLO以“俭”驭“繁”
深度学习·算法·计算机视觉
点云SLAM2 小时前
图论中邻接矩阵和邻接表详解
算法·图论·slam·邻接表·邻接矩阵·最大团·稠密图
啊董dong2 小时前
课后作业-2025年11月23号作业
数据结构·c++·算法·深度优先·noi
星释2 小时前
Rust 练习册 80:Grains与位运算
大数据·算法·rust
zzzsde2 小时前
【C++】C++11(1):右值引用和移动语义
开发语言·c++·算法