poj3461 KMP模板题

来源:互联网 发布:mysql like 优化 编辑:程序博客网 时间:2024/05/20 20:04

   题意:给定两个字符串,求在主串中模式串出现的次数。

#include<stdio.h>char A[1000005],B[10005];int next[10005];void getnext(){    int i,j;    next[0]=0;    for(i=1,j=0;B[i];i++)    {        while(j>0&&B[i]!=B[j])            j=next[j-1];        if(B[i]==B[j])            j++;        next[i]=j;    }}int KMP(){    int ans,i,j;    for(i=j=ans=0;A[i];i++)    {        while(j>0&&A[i]!=B[j])            j=next[j-1];        if(A[i]==B[j])        {            j++;            if(!B[j])            {                //此处不能写j=0                j=next[j-1];                ans++;            }        }    }    return ans;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%s%s",B,A);        getnext();        printf("%d\n",KMP());    }    return 0;}


 

原创粉丝点击