[算法题]动态规划-求最长回文子串

172 阅读1分钟

回文即对称的字符串,如aba abccba

问:给一个字符串,返回最长回文子串

对称轴的话就是中心,所以可以用“中心扩散法”,也就是我们常说的“动态规划”。(注:要区分奇数偶数)

/**
 * @param {string} s
 * @return {string}
 */
var getLongestHuiwen = function(s) {
    if (s.length === 1) return s
    let max = ''

    for (let i = 0; i < s.length-1; i++) {
        let odd = centerSpread(s, i, i)
        let even = centerSpread(s, i, i+1)
        if (odd.length > even.length) {
            if (odd.length > max.length) {
                max = odd
            }
        } else {
            if (even.length > max.length) {
                max = even
            }
        }
    }
    return max
};

function centerSpread(s, left, right) {
    let max = ''
    while(left >= 0 && right < s.length) {
        if (s.charAt(left) === s.charAt(right)) {
            left--
            right++
        } else {
            break
        }
    }
     left++
     right--
    max = s.slice(left, right + 1)
    // console.log(max, left)
    return max
}