题目描述
方法:
1. 二重遍历
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
l = 0
repeat = []
if not s:
return s
for i in range(n):
for j in range(n-1,i,-1):
if s[i] == s[j]:
p,q = i, j
while s[p] == s[q] and p<q:
p+=1
q-=1
if (p == q or s[p]==s[q]) and j-i+1>l:
l = j-i+1
repeat = s[i:j+1]
return repeat if repeat else s[0]
2. 额外空间储存已经回文的序列,动态规划
class Solution:
def longestPalindrome(self, s: str) -> str:
if not s or len(s)<2:
return s
n = len(s)
dp = [[0]*n for i in range(n)]
ml = 0
mr = 0
mlen = 1
for r in range(1,n):
for l in range(0,r):
if s[l] == s[r] and (r - l<=2 or dp[l+1][r-1]):
dp[l][r] = True
if r - l + 1 > mlen:
ml = l
mr = r
mlen = r - l + 1
return s[ml:mr+1]
注意:
dp=[False*n]*n 写法会导致修改dp[i][j]时候把每一行都修改!
具体参考(23条消息) python中二维数组元素修改_修改python 二维数组_weixin_39345190的博客-CSDN博客