题目:
题目截图:
解题步骤:
1.用双指针维护一个滑动窗口,用来剪切子串
2.不断移动右指针,遇到重复字符,就把左指针移动到重复字符的下一位
3.过程中,记录所有窗口的长度,并返回最大值
代码:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let l = 0; // 左指针
let res = 0; // 记录长度
const 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;
};
时间复杂度分析:
时间复杂度是O(n),n是字符串的长度
空间复杂度分析:
空间复杂度是O(m),m是字符串中不重复字符的个数
怎么样,是不是很简单,你学会了吗 ?
如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪!!!