hdu2594--kmp入门题

来源:互联网 发布:java 运行时获取注解 编辑:程序博客网 时间:2024/05/19 01:10
//#include<bits/stdc++.h>#include<iostream>#include<memory.h>#include<string.h>#include<cstdio>using namespace std;const int maxn=10e3;char a[50500],b[100050];int nextl[100050];void crenext(){   memset(nextl,0,sizeof(nextl));    nextl[0]=-1;    int j;    int m=strlen(b)-1;    for(int i=1;i<=m;i++)    {        j=nextl[i-1];        while(b[j+1]!=b[i]&&j>=0)        {            j=nextl[j];//cout<<j<<endl;        }        if(b[j+1]==b[i])        nextl[i]=j+1;        else            nextl[i]=-1;    }     for(int i=0;i<=m;i++)      nextl[i]++; /*     for(int i=0;i<m;i++)cout<<nextl[i]<<" ";*/}int main(){    memset(b,0,sizeof(b));memset(a,0,sizeof(a));    char c[]=" ";    while(cin>>b>>a)    {        //>>a;   {        strcat(b,c);        strcat(b,a);        int m=strlen(b);        int i=0,j=0,pos=-1;    crenext();    int coun=0; //char *pp=*b[m-nextl[m-1]];    if(nextl[m-1]==0&&b[m-1]!=b[0])cout<<0<<endl;    else    {    for(int i=0;i<nextl[m-1];i++)printf("%c",b[i]);cout<<" "<<nextl[m-1]<<endl;    }   }    }    return 0;}
把两个串接起来然后把next[m-1]输出就行了