两种解法思路差不多:

  1. 对数组遍历, 并使用临时数组保存遍历过的元素, 如果元素出现,则比较并保存当前的最大长度,同时临时序列保留相同元素后的无重复序列继续遍历
  2. 使用双指针,如果新的元素 与起止指针范围内的元素重复,就暂存当前的无重复序列长度, 并将起始指针移动到重复元素后
class Solution:
    def maxLength(self , arr ):
        # write code here
        longest_length, cur_seq = 0, []
        for i in arr:
            if i in cur_seq:
                longest_length = max(longest_length, len(cur_seq))
                start = cur_seq.index(i)
                cur_seq = cur_seq[start+1:]
            cur_seq.append(i)
        return max(longest_length, len(cur_seq))

        # 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+1
        #     except ValueError:
        #         pass
        #     j += 1

        # return max(longest_length, j-i)