def manacher(s):
ss = '#'+'#'.join(s)+'#'
print(ss)
rl = [0]*len(ss)
maxright = 0
pos = 0
maxlen = 0
for i in range(len(ss)):
# i在maxright左边时找对称回文串
if i < maxright:
rl[i] = min(rl[2*pos-i],maxright-i)
else:
rl[i] = 1
# 左右两边扩展找回文串
while i-rl[i] >= 0 and i+rl[i] < len(ss) and ss[i-rl[i]] == ss[i+rl[i]]:
rl[i] += 1
# 更新maxright和pos
if rl[i]+i-1 > maxright:
maxright = i+rl[i]-1
pos = i
# 更新maxlen
maxlen = max(maxlen,rl[i])
return maxlen-1
最大回文子串
猜你喜欢
转载自blog.csdn.net/changyan_123/article/details/88548469
今日推荐
周排行