js截取字符串最长子串的算法
在JavaScript中,要到一个字符串中的最长子串,我们首先需要明确“最长子串”的定义。如果我们是在寻没有重复字符的最长子串,那么我们可以使用滑动窗口算法。
滑动窗口算法的基本思想是维护一个窗口,该窗口在字符串上滑动,同时更新最长子串的长度和起始位置。当窗口中的字符不重复时,我们尝试扩大窗口;当窗口中的字符重复时,我们缩小窗口。
以下是一个实现这个算法的JavaScript函数:
javascript
function longestSubstring(s) { 
    let maxLength = 0; 
    let left = 0; 
    let set = new Set();  js验证字符串长度
 
    for (let right = 0; right < s.length; right++) { 
        while (set.has(s.charAt(right))) { 
            set.delete(s.charAt(left)); 
            left++; 
        } 
        set.add(s.charAt(right)); 
        maxLength = Math.max(maxLength, right - left + 1); 
    } 
 
    return s.substr(left - maxLength, maxLength); 
}
但是,这个函数有一个问题,它在结束时返回的字符串可能是错误的。因为在循环结束时,left指针可能已经移动到最长子串的右侧。我们需要记录最长子串的开始位置和长度,而不是仅仅更新left和maxLength。
修正后的函数如下:
javascript
function longestSubstring(s) { 
    let maxLength = 0; 
    let start = 0; 
    let set = new Set(); 
    let left = 0; 
 
    for (let right = 0; right < s.length; right++) { 
        while (set.has(s.charAt(right))) { 
            set.delete(s.charAt(left)); 
            left++; 
        } 
        set.add(s.charAt(right)); 
        if (right - left + 1 > maxLength) { 
            maxLength = right - left + 1; 
            start = left; 
        } 
    } 
 
    return s.substr(start, maxLength); 
}
这个函数会正确地返回没有重复字符的最长子串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。