5 最長迴文子串 - 動態規劃

 

給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。

示例 1:

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

輸入: "cbbd"
輸出: "bb"

python 代碼:

動態規劃

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        dp = [[False] * n for _ in range(n)]
        res = ""

        # 枚舉子串的長度 l+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
                # 相鄰則判斷是否相等輸入d[i][j]
                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(res):
                    res = s[i:i+length+1]
        return res

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章