相当于将所有子串都录入到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; } };