poj 2752

来源:互联网 发布:福建广电网络集团副总 编辑:程序博客网 时间:2024/05/22 16:43

KMP简单应用,利用next,一个一个确定是否和后缀匹配

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=400000+10;char s[maxn];int next[maxn];int amount[maxn];int main(){    while(~scanf("%s",s))    {        int len=strlen(s);        int i=0,j=-1;        next[0]=-1;        while(i<len)        {            if(j==-1||s[i]==s[j])            {                i++;                j++;                next[i]=j;            }            else j=next[j];        }       j=next[len-1];       int tot=0;        while(j!=-1)        {            if(s[j]==s[len-1])  amount[tot++]=j+1;            j=next[j];        }        for(i=tot-1;i>=0;i--) printf("%d ",amount[i]);        printf("%d\n",len);    }    return 0;}


原创粉丝点击