3. 无重复字符的最长子串(中)
题目
- 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3
示例 2:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
题解:滑动窗口
- 思路:使用js的Set存不重复的子串,左右指针刚开始指向字符串开头,右指针逐个往后移,当右指针的元素不在Set中就加入,并更新最大长度;如果右指针的元素在Set中:在Set中移除i的元素,i++,一直到j所指的元素可以放进Set。
var lengthOfLongestSubstring = function(s) {
if (s.length === 0) {
return 0;
}
let max = 0;
let i = 0; // 左指针
let j = 0; // 右指针
const charSet = new Set(); // 用于存储当前窗口的字符
while (j < s.length) {
if (!charSet.has(s[j])) {
// 当前字符不在窗口内,移动 j 指针
charSet.add(s[j]);//添加元素到窗口
max = Math.max(max, j - i + 1); // 更新最大长度
j++;
} else {
// 当前字符在窗口内,删除i指针的元素,直到j指针元素可以放进窗口内
charSet.delete(s[i]);
i++;//移动 i 指针
}
}
return max;
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2023-10-28 28. 找出字符串中第一个匹配项的下标