leetcode-3:
题目:
无重复字符的最长子串
给定一个字符串s,请找出其中不含有重复字符的最长字串?
原题截图如下:
leetcode:
leetcode-cn.com/problems/lo…
解题思路:
- 创建set
- 两个指针,一个指向字符串的开头j,一个随着for循环遍历字符串i
- 如果set里没有s[i],说明目前为止还没有重复的字符,把S[i]添加到set,然后更新maxLength
- 如果存在S[i],则从set里删除S[i],并且递增J
- 重复34步骤
JavaScript代码:
var lengthOfLongestSubstring = function(s) {
const set = new Set();
let i = 0,
j = 0,
// 最大值初始化为0
maxLength = 0;
if (s.length === 0) {
return 0;
}
for (i; i < s.length; i++) {
// set里面不存在s[i],则添加进set
if (!set.has(s[i])) {
set.add(s[i]);
// console.log(set);
// 取两者最大值
maxLength = Math.max(maxLength, set.size);
} else {
// 因为不知道重复在哪,直到删除掉重复字符才停止
while (set.has(s[i])) {
set.delete(s[j]); // 删除s[j]值,返回一个布尔值,表示是否删除成功
j++;
console.log(set, j);
}
// 把s[i]添加进set
set.add(s[i]);
}
}
return maxLength;
}
// 测试用例:
s = "sadsabjcgcwhbj"
result = lengthOfLongestSubstring(s)
console.log(result); // 7