给定一个字符串 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