/**
* @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 发布
本文介绍了一种使用JavaScript实现的解决最长不重复子串问题的滑动窗口算法,通过`str`参数,逐步扩大窗口范围,避免重复字符,找到最长的无重复字符子串。算法核心在于维护两个指针和一个临时结果,确保高效找出并更新最长子串。
315

被折叠的 条评论
为什么被折叠?



