Skip to content

前缀函数

Prefix function · Failure function

记录每个前缀的最长真前缀—后缀重合长度的字符串函数。

形式陈述

对字符串 s,定义

π[i]=max{k<i+1: s[0..k1]=s[ik+1..i]}.

计算 π[i] 时,若当前候选边界失配,就沿 π[j1] 退到次长边界,直到匹配或归零。由于候选长度总增量为 O(n)、回退也被其抵消,整体时间 O(n)

直觉

一个前缀的所有可能边界形成由“最长边界的最长边界”递归得到的失配链。

例子与边界

字符串 ababa 的最后一个前缀函数值为 3,对应边界 aba。前缀函数记录的是长度,不是模式在文本中的出现次数;空串边界约定应统一。

推论与应用

它是 KMP 的真正状态摘要,并用于周期、border 树和字符串自动机。

参考资料