“LCP 数组、BWT与FM index以构造好的后缀序为输入或邻近结构,不属于 SA 构造步骤本身。在线文本追加也会改变大量后缀次序,静态构造算法不能局部套用。”
形式陈述 ​
若后缀数组
任意两个后缀在后缀数组区间中的 LCP,等于相应 LCP 数组区间的最小值,因此可与 RMQ 结合回答后缀 LCP 查询。 Kasai 算法利用相邻起点的 LCP 至少下降一这一事实在线性时间构建。
直觉
LCP 数组不保存任意两后缀的最长公共前缀,而只保存后缀数组中相邻后缀之间的值。相邻性却足以恢复任意区间:字典序中两个后缀的公共前缀,会被夹在它们之间的相邻后缀边界中的最小公共前缀卡住,因此答案等于两者排名之间所有相邻 LCP 的最小值。这个“全局查询化为区间最小”是它最重要的结构意义。
例子与边界
字符串 banana 的相邻排序后缀展示重复串结构。LCP 数组只记录相邻后缀;直接把非相邻答案当成某一个数组项会出错,必须取区间最小值。
字符串 banana 的后缀按序大致为 a,ana,anana,banana,na,nana,相邻 LCP 为 ana 与 anana 的 LCP 为 a 与 anana 的 LCP 则是对应区间最小值
LCP 值按字符数计,不是后缀数组下标差。重复字符很多时朴素逐对比较会退化为二次时间,Kasai 算法利用相邻起点的 LCP 至少下降一这一事实线性构造。
推论与应用
后缀数组 提供字典序,数组 保存相邻值,词 提供后缀对象。对 LCP 数组建 RMQ 可回答任意两后缀的 LCP;最长重复子串、后缀比较与分组、不同子串计数、字符串聚类和后缀树的紧凑替代或模拟都依赖这一组合。
Suffix array 中任意两后缀的 LCP 等于它们秩区间内相邻 LCP 的最小值,因此可用RMQ回答;后缀树则把同一公共前缀表示为 LCA 的字符串深度。FM-index主要用 BWT 区间做模式搜索,LCP 可辅助压缩后缀树拓扑或定位,但不是 backward search 的必要定义。三条接口应按数组 RMQ、显式树和压缩索引区分。
参考资料
- OI-Wiki contributors, OI-Wiki (2026), suffix array and LCP.
- cp-algorithms contributors, Algorithms for Competitive Programming (2026), suffix array and LCP.
- Toru Kasai et al., “Linear-Time Longest-Common-Prefix Computation in Suffix Arrays and Its Applications,” CPM 2001, LNCS 2089.