KMP算法
KMP算法
鉴于关于KMP算法的讲义实在太多了(没错就是我懒得写),所以这里并没有关于KMP的具体讲解
代码:
void get_fail()
{
cur=0,fail[1]=0;
rep(i,1,n-1)
{
while ((cur>0) && (s[i+1]!=s[cur+1])) cur=fail[cur];
if (s[i+1]==s[cur+1]) cur++;
fail[i+1]=cur;
}
}
KMP树:
没错,当你把所有结点连向它的fail所指的结点,你就得到了一棵KMP树
这个有一个好,它结点是单调的,如果你顺着一个结点往上遍历,你就可以得到以这个结点为右端点的所有能与前缀match的子串
好吧!

浙公网安备 33010602011771号