二分+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\).