目录
题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
样例
代码
class Solution:
def longestPalindrome(self, s: str) -> str:
n=len(s)
pali=[[False for _ in range(n)]for _ in range(n)]
for i in range(n):
pali[i][i]=True
a=0
maxlen=1
for currlen in range(2,n+1):
for i in range(n-currlen+1):
j=currlen+i-1
if s[i]==s[j]:
if currlen==2:
pali[i][j]=True
else:
pali[i][j]=pali[i+1][j-1]
if pali[i][j]==True and currlen>maxlen:
a=i
maxlen=currlen
return s[a:a+maxlen]
解题思路
动态规划思路,bool数组pali[i][j]表示第i位到第j位的子列是否是回文,所有len=1即pali[i][i]都是回文,接着从len=2到全长进行遍历,len=2的子列两元素相等则定义为true,否则false;从len=3开始,新拓展出的位满足回文要求的话,那么定义为true或false应与(len-2)位时一致,否则一律false,在此期间记录maxlen和对应的起点,最后即可输出。
在python的数组和循环的表示方法这方面得到了很多练习。