美文网首页
5.最长回文子串(medium)

5.最长回文子串(medium)

作者: genggejianyi | 来源:发表于2019-05-13 23:31 被阅读0次

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
    示例 1:
    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:
    输入: "cbbd"
    输出: "bb"

    • show the code:
    class Solution:
        def longestPalindrome(self, s: str) -> str:
            n = len(s)
            dp = [[0]*len(s) for i in range(n)]
            res = ''
            for i in range(n-1,-1,-1):
                for j in range(i,n):
                    dp[i][j] = (s[i] == s[j]) and (j-i<3 or dp[i+1][j-1])
                    if dp[i][j] and j-i+1>len(res):
                        res = s[i:j+1]
            return res
    
    • 这道题关键是动态规划,使用DP能够减少计算不必要的过程。
    • 找到中间状态转移方程P(i,j) = (P(i+1,j−1) and Si == Sj),其中P(i,j)是布尔值,我们需要新建一个nXn的二维数组来存储中间过程。
    • 这里注意我们的外层循环i从字符串右往左遍历,内层循环从左往右遍历,因为我们求dp矩阵的过程中,需要先计算某个位置右上角的值,即i+1.
    知道是DP后,难点是弄清楚两层循环遍历的过程,以此来求出中间矩阵dp.
    时间复杂度:n2,空间复杂度:n2

    相关文章

      网友评论

          本文标题:5.最长回文子串(medium)

          本文链接:https://www.haomeiwen.com/subject/tegdaqtx.html