3、无重复字符的最长子串
题目描述:
- 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
js
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。思路如下:
- 1、用双指针维护一个滑动窗口,用来剪切子串。
- 2、不断移动右指针,直到遇到重复字符的时候把左指针移到重复字符的下一位。
- 3、移动指针过程中,记录窗口长度的最大值即为答案。
代码
js
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let l = 0; // 定义左指针
let res = 0; // 结果
let map = new Map(); // 存放字符和对应下标
for (let r = 0; r < s.length; r++) {
// 如果出现了重复字符,则把左指针移到重复字符的下一位。注意同时满足重复字符的索引大于左指针。
if (map.has(s[r]) && map.get(s[r]) >= l) {
l = map.get(s[r]) + 1;
}
res = Math.max(res, r - l + 1); // 计算结果
map.set(s[r], r); // 存下每个字符的下标
}
return res;
};
russ