BZOJ 1355 KMP中next数组的应用

思路:
我们知道 next[i]是失配的i下一步要去哪儿 next[n]就是失配的n要去哪儿
n-next[n]就是答案(即最短周期)啦

//By SiriusRen
#include <cstdio>
using namespace std;
int n,next[1000050],j;
char a[1000050];
int main(){
    scanf("%d%s",&n,a+1);
    for(int i=2;i<=n;i++){
        while(j&&a[i]!=a[j+1])j=next[j];
        if(a[i]==a[j+1])j++;
        next[i]=j;
    }
    printf("%d\n",n-next[n]);
}

这里写图片描述

posted @ 2016-10-31 16:10  SiriusRen  阅读(142)  评论(0编辑  收藏  举报