給定一個字符串 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