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