最大回文子串

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
今日推荐