Skip to content

LCP 数组

Longest common prefix array · Height array

按后缀数组顺序记录相邻后缀最长公共前缀长度的数组。

条目类型
定义

形式陈述

若后缀数组 SA 按字典序排列所有后缀,则常定义

LCP[i]=lcp(s[SA[i1]..],s[SA[i]..])(i>0).

任意两个后缀在后缀数组区间中的 LCP,等于相应 LCP 数组区间的最小值,因此可与 RMQ 结合回答后缀 LCP 查询。 Kasai 算法利用相邻起点的 LCP 至少下降一这一事实在线性时间构建。

直觉

LCP 数组不保存任意两后缀的最长公共前缀,而只保存后缀数组中相邻后缀之间的值。相邻性却足以恢复任意区间:字典序中两个后缀的公共前缀,会被夹在它们之间的相邻后缀边界中的最小公共前缀卡住,因此答案等于两者排名之间所有相邻 LCP 的最小值。这个“全局查询化为区间最小”是它最重要的结构意义。

LCP 数组与区间最小值
例子与边界

字符串 banana 的相邻排序后缀展示重复串结构。LCP 数组只记录相邻后缀;直接把非相邻答案当成某一个数组项会出错,必须取区间最小值。

字符串 banana 的后缀按序大致为 a,ana,anana,banana,na,nana,相邻 LCP 为 1,3,0,0,2。后缀 anaanana 的 LCP 为 3aanana 的 LCP 则是对应区间最小值 min(1,3)=1

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.
关系图谱8 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系