kmp算法

来源:互联网 发布:淘宝创立于哪一年 编辑:程序博客网 时间:2024/06/16 12:56
#include<cstdio>#include<cmath>#include<iostream>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;char s[1000],c[100];int next[1000];void getn(){    int i=0,j=-1;    next[0]=-1;    while(c[i])    {        if(j==-1||c[i]==c[j])        {            i++;j++;            next[i]=j;        }        else j=next[j];    }}int match(){    int i=0,j=0,lc,ls;    ls=strlen(s),lc=strlen(c);    while(i<lc&&j<ls)    {        if(i==-1||c[i]==s[j])//一定不能漏i==-1        {            i++,j++;        }        else i=next[i];    }    if(i==lc) return j-lc;    return -1;}int main(){    int i,j,n;    scanf("%d",&n);    while(n--)    {        scanf("%s%s",c,s);        getn();        printf("%d\n",match());    }    return 0;}

朴素对比

int cmp(){    int i,j,k,ls,lc;    ls=strlen(s);    lc=strlen(c);    for(i=0;i<ls;i++)    {        for(j=i,k=0;k<lc&&s[j]==c[k];j++,k++);        if(k==lc) return i;    }    return -1;}


0 0