相当于将所有子串都录入到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;
}
};
京公网安备 11010502036488号