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的子串

好吧!

posted @ 2016-12-05 22:22  Krew  阅读(110)  评论(0)    收藏  举报