題目:
給定一個字符串 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長度的特殊情況。