// 法1
const lengthOfLongestSubstring1 = function (s) {
let left = 0;
let right = 0;
let max = 0;
let arr = s.split('');
let set = new Set();
while (right < arr.length) {
if (!set.has(arr[right])) {
set.add(arr[right]);
max = Math.max(max, set.size);
} else {
// 这一坨是为了找到对称前的
while (arr[left]!== arr[right]) {
set.delete(arr[left]); // 把之前存的清理掉
left++;
}
left++; // 找到对称的那个元素位置后,窗要重新开始所以要加1
}
right++;
}
return max;
};
// 法2
const lengthOfLongestSubstring2 = function (s) {
let left = 0;
let right = 0;
let max = 0;
let arr = s.split('');
let set = new Set();
while (right < arr.length) {
while(left <= right && set.has(arr[right])) {
set.delete(arr[left]);
left++;
}
set.add(arr[right]);
max = Math.max(max,right - left + 1);
right++;
}
return max;
};
// 模版
//外层循环扩展右边界,内层循环扩展左边界
for (int l = 0, r = 0 ; r < n ; r++) {
//当前考虑的元素
while (l <= r && check()) {//区间[left,right]不符合题意
//扩展左边界
}
//区间[left,right]符合题意,统计相关信息
}