Const
function lengthOfLongestSubstring(s: string): number {
const map = new Map<string, number>(); // 维护从下标 left 到下标 right 的字符
let ans = 0;
for (let l = 0, r = 0; r < s.length; r++) {
map.set(s[r], (map.get(s[r]) ?? 0) + 1);
while (map.get(s[r])! > 1) { // 窗口内有重复字母
map.set(s[l], map.get(s[l])! - 1); // 移除窗口左端点字母
l++; // 缩小窗口
}
ans = Math.max(ans, r - l + 1);
}
return ans;
}
3.无重复字符的最长子串
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:
输入:
s = "abcabcbb"
输出:
3
解释: 因为无重复字符的最长子串是
"abc"
,所以其长度为 3。示例 2:
输入:
s = "bbbbb"
输出:
1
解释: 因为无重复字符的最长子串是
"b"
,所以其长度为 1。示例 3:
输入:
s = "pwwkew"
输出:
3
解释: 因为无重复字符的最长子串是
"wke"
,所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。提示:
0 <= s.length <= 5 * 10^4
s
由英文字母、数字、符号和空格组成