kmp

来源:互联网 发布:淘宝链接怎么发微信 编辑:程序博客网 时间:2024/05/23 17:12

最近刚看了KMP算法,在oj上刷了几道题:

poj3461 

#include<iostream>#include<string>using namespace std;void GetNext(char p[], int next[],int Plen){next[0]=-1;//下标从一开始,0无效next[1]=0;int j=0;for(int index=2;index<=Plen;index++){while(j>0 &&p[index-1]!=p[j] )    j=next[j];        if(p[index-1]==p[j])j++;next[index]=j;}}void kmp(char s[],char p[]){int Slen=0;while(s[Slen]!='\0')Slen++;int Plen=0;while( p[Plen]!= '\0' )            Plen++;    int *next=new int[Plen];    GetNext(p,next,Plen);int j=0;int num=0;for(int i=0;i<Slen;i++){while(j>0&&s[i]!=p[j])j=next[j];    if(s[i]==p[j])j++;if(j==Plen){           j=next[j];num++;}}printf("%d\n",num);}int main(){int t;char p[10002];char s[1000002];scanf("%d",&t);getchar();while(t--){scanf("%s%s",p,s);          kmp(s,p);}return 0;}




0 0