HDU2087字符串匹配(KMP算法)

http://acm.hdu.edu.cn/showproblem.php?pid=2087

题意:给一个主串,一个模板串,问最多有多少个。

用KMP算法,当然也能用一般方法,还能用库函数,这里给出KMP算法代码,其中函数可以当做模板,苦逼的我第一次学KMP的时候,看的解题报告竟然是错的!!!!白耗了一个下午。。。。但童鞋们请相信,我的一定是AC的!!!!!错代码害死人啊。。。。。

KMP算法AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s1[1010],s2[1010];
int next[1010],l1,l2;
void getnext()
{
    int i=0,j=-1;
    next[0]=-1;
    while(i<l2)
    {
        if(j==-1||s2[i]==s2[j])//此处是模板串内部比较
        {
            i++,j++;
            next[i]=j;
        }
        else
            j=next[j];
    }
}
int kmp()
{
    int i=0,j=0,sum=0;
    while(i<l1)
    {
        if(j==-1||s1[i]==s2[j])
            i++,j++;
        else
            j=next[j];
        if(j==l2)
        {
            sum++;
            j=next[j]+j;
        }
    }
    return sum;
}
int main()
{
    while(scanf("%s",&s1)!=EOF)
    {
        if(s1[0]=='#')break;
        scanf("%s",&s2);
        l1=strlen(s1);
        l2=strlen(s2);
        getnext();
        printf("%d\n",kmp());
    }
    return 0;
}

 

posted @ 2013-08-14 19:30  拼搏今朝 努力奋进  阅读(152)  评论(0)    收藏  举报