题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
双指针:可视为一个从左到右移动的滑动窗口
class Solution:
def maxLength(self , arr ):
# write code here
usedChar={} #记录当前不重复子数组
l=0 #数组左边
res=0 #最终输出,即最长无重复子数组的长度
for i in range(len(arr)):
if arr[i] in usedChar and usedChar[arr[i]]>=l: #这个已经出现
l=usedChar[arr[i]]+1 #跳过这个,从下一个重新记录
else:
res=max(res, i-l+1) #没有重复,就一边增加窗口宽度一边调整最大值
usedChar[arr[i]]=i #匹配键值对
return res