给定一个长度为n的数组arr, 返回arr的最长无重复元素子数组的长度, 无重复指的是所有数字都不相同.
子数组是连续的, 比如[1,3,5,7,9]的子数组有[1,3], [3,5,7]等等, 但是[1,3,7]不是子数组- 标准的滑动窗口模板问题;
Python
class Solution:
def maxLength(self , arr: List[int]) -> int:
if not arr: return 0
N = len(arr)
l, r = 0, 0 # [l, r] 滑动窗口闭区间
ret = 1
book = set()
while r < N:
# 当不满足条件时, 循环移动左边界直到再次满足
while arr[r] in book: # 注意这里判断的是 arr[r]
book.remove(arr[l]) # 这里移除的是 arr[l]
l += 1
ret = max(ret, r - l + 1) # 更新结果
book.add(arr[r])
r += 1
return ret