# 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
const str = "bbtablud"
function lengthOfLongestSubstring(str) {
let max = 0;
let startIndex = 0;
let endIndex = 0;
while (endIndex < str.length) {
const code = str[endIndex];
const idx = str.slice(startIndex, endIndex).indexOf(code)
if (idx > -1) {
startIndex += (idx + 1)
} else {
max = Math.max(max, endIndex - startIndex + 1)
}
endIndex++;
}
return max;
}
console.log(lengthOfLongestSubstring(str))
总结:
开始时间复杂度高是因为我每次超找到重复的之后,又开始从重复位置继续遍历,所以时间复杂度是大于O(n)
看了题解后,主要思路差别就是,我还特地那个变量来存start end的数据 其实直接通过string.prototype.slice就可以了 ,其他思路一样。