/** * @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 公布