5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
解题思路
今天直接搬运了吧,来自liweiwei大佬的题解。我自己再班门弄斧没啥意思了。里面讲整个DP的思路、内容做了完整详细的总结,一定要仔细看完啊!有用的!
还是附上抄来的代码,总有一天我也能自己写出来:
class Solution:
def longestPalindrome(self, s: str) -> str:
size = len(s)
if size < 2:
return s
dp = [[False for _ in range(size)] for _ in range(size)]
max_len = 1 #记录最长子串长度
start = 0 #记录子串的开始位置
for i in range(size):
dp[i][i] = True
for j in range(1, size):
for i in range(0, j):
if s[i] == s[j]:
if j - i < 3:
dp[i][j] = True
else:
dp[i][j] = dp[i+1][j-1]
else:
dp[i][j] = False
if dp[i][j]:
cur_len = j - i + 1 #这里别忘了+1
if cur_len > max_len:
max_len = cur_len
start = i
return s[start : start + max_len]