function lengthOfLongestSubstring(s: string): number {
//l 左指针 maxLength 最大长度
let l:number = 0
let maxLength:number = 0
// hashMap存储重复字符,以及出现的位置
const map = new Map()
// r 右指针 开始遍历
for (let r:number = 0; r < s.length; r++) {
// 去除右指针对应的字符
const str:string = s[r]
// 判断是否含有重复字符,有的话取出下标
const i:number = map.get(str)
// 存在重复字符,且出现重复字符的位置大于等于左指针,那么将左指针移动到重复字符index的下一位
if (map.has(str) && i >= l) {
l = i + 1 // 如果找到重复的,就讲左指针移动到重复字符的下一位
}
// 根据不断右移的右指针 和 不断更新的左指针判断大小
// 当第一个重复值出现的时候左指针移动到下一位,右指针继续右移动,包含当前右指针的位置
// 不断更新maxLength的值
maxLength = Math.max(maxLength, r - l + 1)
// 存入字符以及字符出现的位置
map.set(str, r)
}
return maxLength
};
leetCode - 无重复字符的最长子串
最新推荐文章于 2024-06-15 09:23:13 发布