算法题-最长回文子串

Posted zhoulixiangblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题-最长回文子串相关的知识,希望对你有一定的参考价值。

描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例1

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例2

输入: "cbbd"
输出: "bb"

解答

var longestPalindrome = function(s) {
    let maxStr = ''
    let len = s.length
    for (let i = 0; i < len; i++) {
        let curStr = s[i]
        let j = i - 1
        let k = i + 1
        while(k < len && s[k] === s[i]){
            curStr = curStr + s[k]
            k++
        }
        i = k - 1
        while (j >= 0 && k < len) {
            if (s[j] !== s[k]) {
                break
            }
            curStr = s[j] + curStr + s[k]
            j--
            k++
        }
        if (curStr.length > maxStr.length) {
            maxStr = curStr
        }
    }
    return maxStr
};

分析

时间复杂度:O(n^2),空间复杂度:O(n)

以上是关于算法题-最长回文子串的主要内容,如果未能解决你的问题,请参考以下文章

算法-最长回文子串(Manacher算法)

LeetCode高频算法面试题 最长回文子串

《算法竞赛入门经典》3.3最长回文子串

manacher算法 O(n) 求字符串中最长回文子串 hdu 3068(模板题)

算法题之最大回文子串

数据结构与算法 Manacher 算法求最长回文子串