leetCode刷题(1)

题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例1:
输入:s = "abcabcbb"
输出:3
解释:因为无重复字符的最长子串是“abc”,所以其长度为3。

示例2:
输入:s = "bbbbb"
输出:1
解释:因为无重复字符的最长子串是“b”,所以其长度为1。

示例3:
输入:s = ""
输出:0

思路:从字符串的第一个字符开始遍历,当遇到重复的字符时,将原字符串从其重复的字符截取,再进行遍历,直到最后一个字符。

/**
 * @param {string} s
 * @returns {number}
 */
var lengthOfLongerSubstring = function(s) {
  let i = 0;    // 遍历的索引
  let longerStr = "";  // 最后返回的最长子串
  let tempStr = "";
  while (i < s.length) {
    // 重复的字符所在位置
    let repeatIndex = tempStr.indexOf(s[i]);
    if (repeatIndex === -1) {
      // 没有重复
      tempStr += s[i];
      i++;
    } else {
      // 发生重复
      if (longerStr.length < tempStr.length) {
        longerStr = tempStr;
      }
      tempStr = "";
      i = 0;
      s = s.substr(repeatIndex + 1);
    }
  }
  return tempStr.length < longerStr.length ? longerStr.length : tempStr.length;
};

思考:第一次使用测试用例 s = "abcdefg"; 时,没有考虑不重复的情况,最后导致直接返回的是longerStr,返回长度为0。

你可能感兴趣的:(leetCode刷题(1))