leetcode-3无重复字符的最长子串

128 阅读1分钟

leetcode-3:

题目:

无重复字符的最长子串 给定一个字符串s,请找出其中不含有重复字符的最长字串? 原题截图如下: image.png leetcode: leetcode-cn.com/problems/lo…

解题思路:

  1. 创建set
  2. 两个指针,一个指向字符串的开头j,一个随着for循环遍历字符串i
  3. 如果set里没有s[i],说明目前为止还没有重复的字符,把S[i]添加到set,然后更新maxLength
  4. 如果存在S[i],则从set里删除S[i],并且递增J
  5. 重复34步骤

1f8a623b7bfb414a34abab5d282eed4.jpg

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