LeetCode003无重复字符的最长子串之滑动窗口

题目描述

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


【题目来源:力扣(LeetCode)】

滑动窗口(Sliding Window)

滑动窗口算法是在给定特定窗口大小的数组或字符串上执行要求的操作。该算法可以将一部分问题中的嵌套循环转变为一个单循环,因此它可以减少时间复杂度。滑动窗口算法在一个特定大小的字符串或数组上进行操作,而不在整个字符串和数组上操作,就像队列一样,一端在添加元素的过程中另一端也在删除元素,以此来达到不断更新窗口的元素直到匹配出我们最需要的结果。

图示:


分析

由题可知,该题中滑动窗口的长度不固定,所以我们采用定一(i)移一(j)的方法。一直循环到移动的元素和固定的元素相同,则移动窗口的长度为J - I,再固定下一个元素,一直到目标被完全遍历,返回窗口最大长度。

代码

class Solution:    

def lengthOfLongestSubstring(self, s: str) -> int:        

    dic, res, i = {}, 0, -1         

    for j in range(len(s)):            

        if s[j] in dic:                

            i = max(i, dic[s[j]])             

        dic[s[j]] = j                

        res = max(res, j - i)           

return res

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容