无重复字符的最长子串解法

148 阅读1分钟

解题思路

  • 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
};