解题思路
- 1、定义左右指针,和一个集合来存储子串,有一个max来表示最大的差值
- 2、移动右指针,不断更新子串的内容,当右指针指向的值在子串中不存在的时候,添加进去
- 3、当右指针指向的值在子串中存在时,left++直到子串中不存在重复字符
- 4、时刻更新max的值,取子串的最大长度即可
这里解释下为什么第3步,因为题目要求的是不重复的子串,所以当我们碰到重复的字母后,就要将左指针右移,直到子串str中不存在重复的字母为止
代码
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
// 处理极端情况
if (s.length === 1) {
return 1;
}
let left = 0, right = 1, max = 0, str = '';
while(right < s.length) {
str = s.slice(left, right);
if (str.indexOf(s.charAt(right)) > -1) {
left ++;
continue;
} else {
right ++;
}
if (right - left > max) max = right - left;
}
return max
};