Skip to content

Latest commit

 

History

History
36 lines (33 loc) · 1.17 KB

03. 无重复字符的最长子串.md

File metadata and controls

36 lines (33 loc) · 1.17 KB

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

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        #采用滑动窗口求解
        n = len(s)
        cur_len = 0
        max_len = 0
        #左边界
        left = 0
        lookup = set()

        for i in range(n):
            #当前长度加1
            cur_len += 1
            #如果当前遍历到的字符已经存在于历史集合之中,
            #则从历史集合当中逐一删掉左边界的字符,并且当前长度减1,直至遍历到的当前字符不存在于历史集合中
            while s[i] in lookup:
                lookup.remove(s[left])
                left += 1
                cur_len -= 1
            #如果当前长度大于维护的最大长度,则赋值给最大长度
            if cur_len > max_len:
                max_len = cur_len
            #将当前字符存入历史集合当中
            lookup.add(s[i])
        #返回最终的最大长度
        return max_len