这个力扣上的题目:

用JavaScript来查找无重复字符的最长子串_javascript


解题思路:

  1. 定义一个哈希表,来存储字符和字符出现的次数;
  2. 遍历字符串
  3. 滑动窗口算法

滑动窗口算法
滑动窗口算法是一种用来处理数组或者字符串中连续子集问题的有效方法。

通过定义一个可以移动的“窗口”,并且在这个窗口内进行操作,寻找满足条件的最大区间或者最小区间的子序列长度。

JavaScript的哈希表Map保存键值对,并记住键的原始插入顺序。任何值(对象或原始值)都可以作为一个键或一个值。

代码如下:

function lengthOfLongestSubstring(s) {
  let maxLength = 0;
  let start = 0;
  const charMap = new Map();

  for (let end = 0; end < s.length; end++) {
    const char = s[end];

    // 如果当前字符已经在哈希表中,则更新start指针
    if (charMap.has(char)) {
      start = Math.max(start, charMap.get(char) + 1);
    }

    // 将当前字符加入哈希表
    charMap.set(char, end);
    console.log(char,end,start,maxLength)
    // 更新最大长度
    maxLength = Math.max(maxLength, end - start + 1);
  }

  return maxLength;
}

console.log(lengthOfLongestSubstring('aaabbbsssss'))