hdu1686 KMP水题

题意是给出文本串和模式串  玩模式串在文本串中出现多少次         把KMP稍稍改动下就ok了

#include
#include
#include
using namespace std;

char str1[10010],str[1000100];
int next[10010];
int deal(int len)
{
    next[0]=-1;
    int j=0;
    int k=-1;
    while(j<len-1)
    {
        if(k==-1||str1[k]==str1[j])
        {
            ++j;
            ++k;
            next[j]=k;
        }
        else k=next[k];
    }   
    return 0;
}
int main()
{
    int T,i,j;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s%s",str1,str);
        int len1=strlen(str1);
        int len2=strlen(str);
        deal(len1);
        i=j=0;
        int k=0;
        while(i<len2)
        {
            
            if(j==-1||str[i]==str1[j])
            {
                i++;
                j++;
            }
            else j=next[j];
            if(j==len1)
            { 
                k++;
                i--;j--;
                j=next[j];
             
            }
        }
        printf("%d\n",k);
    }    
    return 0;
}

你可能感兴趣的:(KMP)