给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。js实现
时间: 2023-10-14 17:07:02 浏览: 93
可以使用滑动窗口来解决此问题。滑动窗口是指一个可以滑动的区间,通常用两个指针表示,即左指针和右指针。
具体思路如下:
1. 定义左指针 left 和右指针 right,初始值均为 0。
2. 定义一个 Set 集合用于存储当前窗口内的所有字符。
3. 当 right 指针没有到达字符串末尾时,依次判断 s[right] 是否在集合中:
a. 如果不在集合中,将 s[right] 加入集合,然后将 right 指针向右移动一位。
b. 如果在集合中,将 s[left] 从集合中删除,然后将 left 指针向右移动一位。
4. 在遍历过程中,记录最大的不含重复字符的子串长度。
代码实现如下:
```javascript
function lengthOfLongestSubstring(s) {
let left = 0, right = 0, maxLen = 0;
const set = new Set();
while (right < s.length) {
if (!set.has(s[right])) {
set.add(s[right]);
right++;
maxLen = Math.max(maxLen, set.size);
} else {
set.delete(s[left]);
left++;
}
}
return maxLen;
}
```
测试一下:
```javascript
console.log(lengthOfLongestSubstring('abcabcbb')); // 3
console.log(lengthOfLongestSubstring('bbbbb')); // 1
console.log(lengthOfLongestSubstring('pwwkew')); // 3
```
以上代码时间复杂度为 O(n),空间复杂度为 O(min(n, m)),其中 n 是字符串的长度,m 是字符集的大小。
阅读全文