先是回文子串的判断(详见上一篇:Leetcode-回文子串),只要跟着循环记录下当前最长的回文串位置就好了,但是在Python中需要提前声明记录最长回文子串的终止位置为0,因为最后需要用来判断最长回文串是否大于一,否则返回字符串第一个位置。
class Solution:
def longestPalindrome(self, s: str) -> str:
n = len(s)
ma = 0 ## 记录当前最大回文串长度
g=0 ## 初始化最长回文串的终止位置
c = [[0 for i in range(n+1)]for i in range(n+1)]
for i in range(n,0,-1):
for j in range(i,n+1):
if(s[i-1]==s[j-1]):
if(i==j):
c[i][j] = 1
elif(j-i<=1):
c[i][j] = 1
if(ma<=(j-i+1)): ## 判断当前最长长度,并记录位置
ma = j-i+1
k,g=i,j
elif(c[i+1][j-1]):
c[i][j] = 1
if(ma<=(j-i+1)):
ma = j-i+1
k,g=i,j
if(g):
return s[k-1:g]
else:
return s[0]
执行通过:
这就是中等题嘛。。。执行时间真可怕