给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入:"babad"
输出:"bab"
注意:"aba" 也是一个有效答案。
示例 2:
输入:"cbbd"
输出:"bb"
demo
classSolution:deflongestPalindrome(self, s:str)->str:# 马拉车算法# 1. 其实就是用最长的字符串做剪枝提速# 2. 关键就是要在原来的字符串s中,插入#符
ret ='#'for char in s:
ret = ret + char +'#'
ret ='^'+ ret +'$'
max_str =''
center =0
mx =0
p =[0]*len(ret)for i inrange(1,len(ret)-1):if i < mx:# 如果当前点已经包含在某些字符串中,
j =2*center - i
p[i]=min(mx-i, p[j])while ret[i - p[i]-1]== ret[i + p[i]+1]:# 以一个点为中心向两边扩展
p[i]+=1if i + p[i]> mx:# 更新最长字符串的中心和半径
center = i
mx = i + p[i]if1+2*p[i]>len(max_str):# 更新最长字符串
max_str = ret[i - p[i]: i + p[i]+1]return max_str.replace('#','')