最长无重复子串

无重复字符的最长子串

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

复制代码
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),提高不少。

相关推荐
@蓝莓果粒茶7 分钟前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
设计师小聂!8 分钟前
力扣热题100----------53最大子数组和
java·数据结构·算法·leetcode
CoovallyAIHub43 分钟前
避开算力坑!无人机桥梁检测场景下YOLO模型选型指南
深度学习·算法·计算机视觉
YouQian7721 小时前
问题 C: 字符串匹配
c语言·数据结构·算法
yanxing.D1 小时前
408——数据结构(第二章 线性表)
数据结构·算法
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
YuTaoShao2 小时前
【LeetCode 热题 100】51. N 皇后——回溯
java·算法·leetcode·职场和发展
2 小时前
3D碰撞检测系统 基于SAT算法+Burst优化(Unity)
算法·3d·unity·c#·游戏引擎·sat
Tony沈哲2 小时前
OpenCV 图像调色优化实录:基于图像金字塔的 RAW / HEIC 文件加载与调色实践
opencv·算法
我就是全世界2 小时前
Faiss中L2欧式距离与余弦相似度:究竟该如何选择?
算法·faiss