二分+HASH求LCP(最长公共前缀)

二分+HASH求LCP(最长公共前缀)

Question:

如何求第i位开始的后缀和第j位开始的后缀的最长公共前缀的长度?

Answer:

\(lca(i,j)\)为题目所求,\(hash(i,L)\)为以\(i\)往后\(L\)位的\(hash\)值;

先倒过来求\(hash\)值:\(h[i]=h[i+1]*b+s[i]\)

就有:

\[hash(i,L)=h[i]-h[i+L]*b^L \]

再二分求长度\(lca(i,j)\),条件为\(hash(i,L)==hash(j,L)\).

满足的话那\(lca(i,j)>=L\),否则\(lca(i,j)<L\).

posted @ 2020-10-07 15:36  zfz04  阅读(394)  评论(0编辑  收藏  举报