给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
var lengthOfLongestSubstring = function(s) {
// 滑动窗口法能够实现左右两个标识符独立移动
const n = s.length;
if(n <= 1) return n;
let leftFlag = 0;
let rightFlag = 0;
// 存储每次移动后的字符
let temp = new Set();
let maxLen = 0;
while(rightFlag <n){
if(!temp.has(s[rightFlag])){
// 不存在该字符,则存储,更新长度
maxLen = Math.max(maxLen, rightFlag - leftFlag + 1);
temp.add(s[rightFlag]);
rightFlag++;
}else{
// 存在该字符,更行最大长度,去除左标识的重复字符
temp.delete(s[leftFlag]);
leftFlag++;
}
}
return maxLen;
}
整体思路:创建一个有序的set集合,设置左右两个标识符,右标识符用来遍历字符串s,左标识符用来判断是否存在重复字符。无重复时:左不动,添加右字符到set中,右标识符向右继续移动一格;有重复时:左字符删除,坐标识符向右移动一格。