后缀数组--(最长公共前缀)

问题描述:给一个字符串,询问某两个后缀的最长公共前缀。

 

解析:当然用后缀数组最方便,在后缀数组中有很多重要的定义和性质,现在我们来认识一些:

定义:LCP(i,j)=suffix(SA[i])与suffix[SA[j]]的最长公共前缀长度,即排号序后的后缀中第i名和第j名的最长公共前缀长度。

然后我们再用一个重要的性质就可以求出LCP(i,j)了,性质描述:LCP(i,j)=min{LCP(k-1,k)}  i

而对于LCP(k-1,k)我们有height数组啊,比如我们要求suffix(i)和suffix(j)的最长公共前缀,就相当于求height[rank[i]]到height[rank[j]]之间的最小值。

至于区间求最小值,ST是个很好的选择啊,到此问题圆满解决。

你可能感兴趣的:(字符串)