思路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)