跳至主要內容

最长回文子串

Mr.He小于 1 分钟

最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

解答:

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    let start = 0, end = 0;
    function getLength(str, left, right){
      // 这里要非常留意左右边界的问题
        while(left >= 0 && right < str.length && str[left] === str[right]){
            left--
            right++
        }
        return right-left+1
    }
    // 以某一个字符作为中间,看两边扩展最长的长度就是最长回文
    for(let i = 0; i < s.length; i++){
        const len1 = getLength(s, i, i)
        const len2 = getLength(s, i, i+1)
        const len = Math.max(len1, len2)
        if(len > end -start){
            start = i - Math.floor((len-1)/2)
            end = i + Math.floor(len/2)
        }
    }
    return s.substring(start, end+1)
};