/**
* @param {string} str
* @returns number
* 思路:1.start 与 range 组合成一个窗口,窗口内的子串就是以后最长不反复的字符串
* 2.range 每次循环递增
* 3. 因为 slice 左闭右开 所以 range 初始值 为 1,在获取以后元素时 range 要 - 1
* 4. 一个变量 result 存储以后最终后果,一个变量 resultTmp 存储以后匹配到的后果,当以后匹配 resultTmp 长度大于以后最终后果 result 长度时,resultTmp 笼罩以后最终后果 result
* 5. 以后元素已存在于最长子串 resultTmp 时,start 的值批改为以后元素在 resultTmp 匹配到的下标 +1
*(+ 1 是为了新的 start 不蕴含以后反复字符)*(将 start 批改为匹配到的下标 +1,而不是 range 的值 是因为下标 + 1 到 range 之间的字符是不反复的)*/
function lengthOfLongestSubstring(str) {
let start = 0;
let range = 1;
let result = "";
let resultTmp = "";
while (range <= str.length) {
const index = range - 1;
const findIndex = resultTmp.indexOf(str[index]);
if (findIndex > -1) {start = findIndex + start + 1;}
resultTmp = str.slice(start, range++);
if (resultTmp.length > result.length) {result = resultTmp;}
}
console.log(result, result.length);
return result.length;
}
lengthOfLongestSubstring("abcabcbb");
lengthOfLongestSubstring("bbbbb");
lengthOfLongestSubstring("pwwkew");
lengthOfLongestSubstring(" ");
本文由一文多发经营工具平台 EaseWriting 公布