动态规划——最长回文字符串

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

示例 1:

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

思路:动态规划

 

 代码如下:

def longestPalindrome(s):
    n = len(s)
    dp = [[False] * n for _ in range(n)]
    ans = ""
    # 枚举子串的长度 length+1
    for length in range(n):
        # 枚举子串的起始位置 i,这样可以通过 j=i+l 得到子串的结束位置
        for i in range(n):
            j = i + length
            if j >= len(s):
                break
            if length == 0:
                dp[i][j] = True
            elif length == 1:
                dp[i][j] = (s[i] == s[j])
            else:
                dp[i][j] = (dp[i + 1][j - 1] and s[i] == s[j])
            if dp[i][j] and length + 1 > len(ans):
                ans = s[i:j+1]
    return ans

 

原文地址:https://www.cnblogs.com/sunny0824/p/13747173.html