无重复字符的最长子串

54 阅读1分钟

image.png

解题思路:

这里的思路就是sliding window,滑动窗口,具体自行查阅blog.csdn.net/weixin_4398…

  1. 创建一个set
  2. 两个指针,一个指向字符串的开头 = j,一个随着循环遍历 = i
  3. 如果set里面没有s[i],说明还没有重复的字符,把s[i]添加到set里,然后更新最大不重复字符的数量
  4. 如果set里面有s[i],则从set里面删除s[j],并且递增j,再检查set里有没有s[i],反复直到set里没有s[i]
  5. 重复步骤3,4,遍历完所有字符串

实现代码:

var lengthOfLongestSubstring = function(s) {
  const set = new Set();
  let i = 0, j = 0, maxLength = 0;
  if (s.length === 0) return 0;
  for (i; i < s.length; i++) {
    if (!set.has(s[i])) {
      set.add(s[i]);
      maxLength = Math.max(maxLength, set.size);
    } else {
       while (set.has(s[i])) {
        set.delete(s[j]);
        j++;
      }
      set.add(s[i])
    }
  }
  return maxLength;
};