给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
class Solution:
def longestPalindrome(self, s: str) -> str:
ll = len(s)
if ll==0:
return ""
lj = s[0]
ml1=1
ml2 =0
nstart1 = 0
nstart2 =0
start = 0
for i in range(1,ll-1):
j = min(i,ll-i-1)
l=1
for p in range(1,j+1):
if s[i-p] == s[i+p]:
start = i-p
l = 2*p+1
# print(l)
# print(ml1)
else:
break
if ml1 < l:
ml1 = l
# print(ml1)
nstart1 = start
for i in range(0,ll-1):
j = min(i,ll-i-1-1)
l=0
for p in range(0,j+1):
if s[i] == s[i+1] :
if i+p+1 < ll:
if s[i-p] == s[i+p+1]:
start = i-p
l = 2*p+2
# print(l)
else:
break
else:
l=2
start = i
if ml2 < l:
ml2 = l
nstart2 = start
# print(ml2)
print (ml1,ml2)
if ml1 > ml2:
return s[nstart1:ml1+nstart1]
else:
return s[nstart2:ml2+nstart2]
直接采用暴力搜索法,遍历每一个字符的时候,定义一个指针,用于判断其两边是否相等,不相等时break ,并保存最长的回文字符串的长度及其开始的索引。注意这个题要分奇数回文字符串和偶数回文字符串分别考虑,最后取更长的回文字符串。
容易出错的点就是 j 的取值范围,奇数偶数有些许不同。