题目
给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
分析
无重复的子串
需要求得最长的
解法:滑动窗口
思想
1. 使用滑动窗口,快慢2个指针
1. 每次移动快指针,如果与 之前有重复的 则移动慢指针
2. 如果没有重复的 则不断更新 max= Math.max(max, i + 1 - j)
*/
var lengthOfLongestSubstring = function (s) {
// 特殊情况 当s为空时候直接返回0
if (s.length === 0) return 0;
// 初始化 快慢指针 和 max
let max = 1;
let j = 0;
// 快指针从1开始向前移动
for (let i = 1; i < s.length; i++) {
let index = i - 1;
// 每次走一步就判断, 从i-1 到j的过程中 有无重复元素
while (index >= j) {
if (s[index] === s[i]) {
break;
}
index--;
}
// index===j-1 说明无重复
if (index === j-1) {
max = Math.max(max, i + 1 - j);
} else {
// 如果有重复 则移动j 到重复元素的后一位上
j = index + 1;
}
}
return max;
};
//时间复杂度:O(n^2)
//空间复杂度:O(1)
总结
今天这道题是主要是练习如何使用不固定尺寸的滑动窗口 来求连续子串类题目
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com
\