题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例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。