classSolution:deflongestPalindrome(self, s:str)->str:
maxi =1
result = s[0]# 排除字符串s为空的情况。
lens =len(s)if lens <2:return s
for i inrange(lens):
single, s_len = self.center_spread(s, lens, i, i)
gap, g_len = self.center_spread(s, lens, i, i +1)if s_len >= g_len:
temp = single
else:
temp = gap
# temp = single if s_len >= g_len else gapiflen(temp)> maxi:
maxi =len(temp)
result = temp
return result
defcenter_spread(self, s, size, l, r):while l >=0and r < size and s[l]== s[r]:
l -=1
r +=1return s[l +1:r], r - l -1
classSolution:deflongestPalindrome(self, s:str)->str:
size =len(s)if size <2:return s
t ="#"for i inrange(size):
t += s[i]
t +="#"
t_len =2* size +1
p =[0for _ inrange(t_len)]
max_right =0
center =0
max_len =1
start =1for i inrange(t_len):if i < max_right:
mirror =2* center - i
p[i]=min(max_right - i, p[mirror])
left = i -(1+ p[i])
right = i +(1+ p[i])while left >=0and right < t_len and t[left]== t[right]:
p[i]+=1
left -=1
right +=1if i + p[i]> max_right:
max_right = i + p[i]
center = i
if p[i]> max_len:
max_len = p[i]
start =(i - max_len)//2return s[start: start + max_len]