1. class Solution:
    2. def maxLength(self , arr: List[int]) -> int:
    3. dic={} # 哈希表方法拿到各字符最后一次出现的索引位置
    4. dp=res=0
    5. for index,num in enumerate(arr):
    6. i = dic.get(num,-1) # 拿到各字符最后一次出现的索引位置
    7. j = index
    8. dic[num]=j # 更新字符最后一次的下标
    9. dp=dp+1 if dp<j-i else j-i # dp表示以arr[j]结尾的最长无重复子数组
    10. res=max(dp,res)
    11. return res
    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {  
        int dp = 0; int res = 0; int i = 0;
        for (int j = 0; j < s.size(); j++) {
            i = j - 1;
            while (i>=0&&s[i] != s[j])i--; // 线性遍历方法拿到最后一个字符出现位置
            dp = (dp < j - i) ? dp + 1 : j - i;
            res = max(dp, res);
        }
        return res;
        }
    };
    

    image.png