找到字符串的最长无重复字符子串
给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
1、只做一次循环,每次保证两个指针之间都没有重复的值。
2、当right指针走到相同的数的时候(n[arr[right]] > 0),right停下;
3、left++,left往右移动,移动到被重复的数字的后一位时(把被重复的数字的计数器清零后,再往后走一步),停下,保证了两个指针之间的数字是没有被重复的。
4、right就能继续往后走了。
5、记录每个片段的最大值(res = res > right - left + 1 ? res : right - left +1)。
int maxLength(vector<int>& arr) {
// write code here
int n[100000] = { 0 };
int left = 0;
int right = 0;
int res = 0;
int arrLen = arr.size();
while (right < arrLen) {
if (n[arr[right]] > 0) {//计数器
n[arr[left]] = 0;
left++;//左指针
}
else {
n[arr[right]] = 1;
res = res > right - left + 1 ? res : right - left + 1;
right++;
}
}
return res;
}(ps:copy的一个大佬的代码,忘记记下出处了,😢);

京公网安备 11010502036488号