Leetcode第五題:最長迴文子串

題目:

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

示例 1:

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

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

個人思路:

弱雞沒思路

官方答案推薦:

①動態規劃:

構建Pij矩陣,表示從i到j的字符串是否子串;

並得出狀態轉移方程:P(i,j)=P(i+1,j−1)∧(Si​==Sj​),前後字符相同且內部子串爲迴文串時,當前的字符串纔是迴文串。

構造邊界條件,即子串長度爲1或2時。

python代碼:

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        dp = [[0]*n for _ in range(n)]
        maxStr = ''
        if(n<2):
            return s
        for j in range(n):
            for i in range(j+1):
                if (j-i <3) and (s[i]==s[j]):
                    dp[i][j] = 1
                elif (dp[i+1][j-1] and (s[i]==s[j])):
                    dp[i][j] = 1
                else:
                    dp[i][j] = 0
                if dp[i][j] and (j-i+1 > len(maxStr)) :
                    maxStr = s[i:j+1]
        
        return maxStr

反思:

動態規劃沒學明白,還有其他高端算法就不看了。。。寫的時候各種沒考慮到1、2長度的特殊情況。

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