LeetCode 5.最长回文子串

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

示例 1:

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

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

思路:动态规划,
dp[i][j] 记录 s[i:j] 是不是一个回文串,判断回文串满足以下2个条件

  1. s[i] = s[j]
  2. s[i+1:j-1] 是一个回文串,这里用一个条件判断 i+1 >= j-1, 初始化 长度为1 和 长度为0 的串为回文串
class Solution:
    def longestPalindrome(self, s: str) -> str:
        if not s:
            return s
        dp = [[0 for _ in range(len(s))] for __ in range(len(s))]
        ans = s[0]
        for substr_len in range(1,len(s)+1):
            for i in range(len(s)-substr_len+1):
                if substr - len(ans)>2:
                    break
                #print(substr_len,i)
                if substr_len == 1:
                    dp[i][i] = 1
                elif substr_len == 2 and s[i] == s[i+1]:
                    dp[i][i+1] = 1
                    ans = s[i:i+substr_len]
                else:
                    if dp[i+1][i+substr_len-2] == 1 and s[i] == s[i+substr_len-1]:
                        dp[i][i+substr_len-1] = 1
                        ans = s[i:i+substr_len]

        return ans
class Solution:
    def longestPalindrome(self, s: str) -> str:
        if not s:
            return s
        dp = [[0 for _ in range(len(s))] for __ in range(len(s))]
        max_substr_len = 0
        for substr_len in range(1,len(s)+1):
            if substr_len - max_substr_len >2:
                break
            for i in range(len(s)-substr_len+1):
                #print(substr_len,i)
                if substr_len == 1:
                    dp[i][i] = 1
                    ans = s[i:i+substr_len]
                    max_substr_len = substr_len
                elif substr_len == 2 and s[i] == s[i+1]:
                    dp[i][i+1] = 1
                    ans = s[i:i+substr_len]
                    max_substr_len = substr_len
                else:
                    if s[i] != s[i+substr_len-1]:
                        continue
                    elif dp[i+1][i+substr_len-2] == 1 :
                        dp[i][i+substr_len-1] = 1
                        ans = s[i:i+substr_len]   
                        max_substr_len = substr_len             
        return ans
原文地址:https://www.cnblogs.com/sandy-t/p/13124226.html