manacher算法

求字符串s的最长回文子串t。只考虑长度为奇数的回文串。

对于每个位置i,计算最大的r[i],表示s[i-r[i]]~s[i+r[i]]能构成回文串。

f(i)=i+r[i]表示以i为中心的字符串的右边界。

如何计算r[i],可以暴力扩展,也可以利用以下性质。

1~i-1,f(c)最大。如果f(c)>i,r[i]>=min(r[2c-i], f(c)-i); 否则r[i]>=0。

再暴力扩展r[i],更新c。

 

posted @ 2018-10-18 18:55  ROOTae  阅读(87)  评论(0)    收藏  举报