hdu2087

标准的KMP模板题,附代码
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int next[1005];
char str1[1005],str2[1005];
void get_next(int len2)
{
    int k=-1,j=0;
    next[0]=-1;
    while(j<len2)
    {
        if(k==-1||str2[k]==str2[j])
        {
            k++;j++;
            next[j]=k;
        }
        else
        k=next[k];
    }
}
int KMP(int len1,int len2)
{
    int i=0,j=0,sum=0;
    get_next(len2);
    while(i<len1&&j<len2)
    {
        if(j==-1||str1[i]==str2[j])
        {
            i++;
            j++;
        }
        else
        j=next[j];
        if(j==len2)
        {
            sum++;
            j=0;
        }
    }
    return sum;
}
int main()
{
    int len1,len2,sum;
    while(scanf("%s",str1)!=EOF)
    {
        if(strcmp(str1,"#")==0)
        break;
        scanf("%s",str2);
        len1=strlen(str1);
        len2=strlen(str2);
        sum=KMP(len1,len2);
        printf("%d\n",sum);
    }
    return 0;
}

你可能感兴趣的:(hdu2087)