力扣刷题系列:最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
这个题还是有一定难度的。下面的第一段代码是理论上可行的,但是运算量太大,直接超出运算时间。这段代码的逻辑大致如下:首先用i对字符串进行遍历,每当i走到一个位置,用j遍历剩下的字符串,并判断是否有回文子串,这样的话需要走n!次循环,运算量巨大。
def longestPalindrome(self, s: str) -> str:
yy=[]
flag=0
zz=[]
if len(s)>1:
for i in range(len(s)):
m=''
h=s[i::]
z=0
k=True
for j in range(len(h)):
m=m+h[j]
if m==m[::-1] and len(m)>=2:
yy.append(m)
zz.append(len(m))
if len(yy)>=1:
for i in range(len(yy)):
if len(yy[i])==max(zz):
flag=i
return yy[flag]
else:
return s[0]
哈哈,官方最后给的一个测试案例是是这样的:s=“abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa”
好家伙直接给我代码整不会了,报错如下:
于是就只好修改代码,看官方的解答对于我这个门外汉来说实在是想不到,于是就想着修改一下自己的代码,代码逻辑:首先还是用i对字符串进行遍历,不过这里新增加一个max(zz),zz里面存储的是回文串的长度,题目让我们找的是最长的回文字符串,所以在后续找到的比前面小的回文字符串就不需要再放入yy,同时j对剩下的字符串遍历的起始长度为max(zz)。举例:字符串s=‘abbcccbbbcaaccbababcbcabca’,当我第一次找到回文字符串‘bb’时,接下来就需要针对长度至少为3的字符串判断其是否为回文字符串,同样我找到第二个回文串‘bbcccbb’,那我第三次要找的回文串的起始长度至少为7,根据这个逻辑,修改后代码如下,
yy=[]
zz=[0]
if len(s)>1:
for i in range(len(s)):
m=s[i:i+max(zz)]
h=s[i::]
z=0
k=True
for j in range(max(zz),len(h)):
m=m+h[j]
if m==m[::-1] and len(m)>=2:
yy.append(m)
zz.append(len(m))
if len(yy)>=1:
return yy[-1]
else:
return s[0]