KMP

来源:互联网 发布:node es6 编辑:程序博客网 时间:2024/05/29 08:22
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int next[1000];char s[100],txt[100];bool f;void makenext(const char p[]){    int l,k=0,i;    l=strlen(p);    next[0]=0;    for(i=1;i<l;i++)    {        while(k>0&&p[i]!=p[k])            k=next[k-1];        if(p[i]==p[k]) k++;        next[i]=k;    }}void kmp(){    makenext(s);    int i,j,L=strlen(txt),l=strlen(s);    for(i=j=0;i<L;i++)    {        while(j>0&&s[j]!=txt[i]) j=next[j-1];        if(s[j]==txt[i]) j++;        if(j==l)        {            printf("appear at:%d\n",i+1-j);            j=next[j-1];            while(j>0&&s[j]!=txt[i]) j=next[j-1];            f=true;        }    }}int main(){    while(cin>>txt>>s)    {        f=false;        kmp();        if(f) cout<<"true"<<endl;        else cout<<"false"<<endl;    }}


0 0