相当于将所有子串都录入到unordered_map中,保存其中最大的长度
这里利用双指针,i将数据录入,如果遇到重复的,则将已录入的元素,到重复的元素为止,都从unordered_map中移除,再重新开始录入(重复的元素,其value值被更新)

class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        unordered_map<int, int> Mymap;
        int n = arr.size();
        int t = 0, j = 0;
        for (int i = 0; i < n; i++) {
            if (Mymap.count(arr[i])) {//遇到重复的
                while (arr[j] != arr[i] && j <= i) {
                    Mymap.erase(arr[j]);//移除重复的元素之前的已保存的元素
                    j++;
                }
                j++;//保证j与i之间的为无重复元素的子串。若不进行j++, 则数组arr中,i与j之间存在arr[j] == arr[i];
            }
            Mymap[arr[i]] = i;//保存数据进入Mymap且更改已出现的数据的value
            t = Mymap.size() > t ? Mymap.size() : t;//保存子串的最大长度
        }
        return t;
    }
};