思路1,使用一个临时数组作为子数组,遍历一遍
class Solution: def maxLength(self , arr ): if len(arr) in [0,1]: return len(arr) max_sub = 0 #最大无重复长度 tem_arr = [] #子数组 for i in arr: if i not in tem_arr: #当前值不在子数组中 tem_arr.append(i) max_sub = max(max_sub,len(tem_arr)) else: start = tem_arr.index(i) #当前值在子数组中 tem_arr = tem_arr[start+1:] #从重复元素的下一个开始重新计算 tem_arr.append(i) return max_sub
双指针
class Solution: def maxLength(self , arr ): if len(arr) in [0,1]: return len(arr) longest_length,i,j = 0, 0, 0 arr_length = len(arr) while j < arr_length: try: index = arr[i:j].index(arr[j]) #若切片内存在下一个值,更新左指针 longest_length = max(longest_length, j-i) i = index+i+1 except ValueError:#若不存在 跳过 pass j += 1 #右指针每次向前一步 return max(longest_length, j-i)