字符串 KMP HDU 1686

来源:互联网 发布:石头纸 知乎 编辑:程序博客网 时间:2024/04/30 04:42
#include <stdio.h>#include <string.h>/*3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIAN水题KMP */const int M = 10005; const int N = 1000005;char a[N],b[M];int next[M];//一个没注意写成char  查了半天 int lena,lenb;void getNext(){int j=-1;next[0]=-1;for(int i=1;i<lenb;i++){while(j>=0 && b[i]!=b[j+1])j=next[j];if(b[i]==b[j+1])j++;next[i]=j;}}int kmp(){int j=next[0];int ans=0;for(int i=0;i<lena;i++){while(j>=0 && a[i]!=b[j+1])j=next[j];if(a[i]== b[j+1])j++;if(j==lenb-1){ans++;j=next[j];//重置回去 }}return ans;}int main(){int T;scanf("%d",&T);while(T--){scanf("%s%s",b,a);lena=strlen(a);lenb=strlen(b);getNext();printf("%d\n",kmp()); }return 0;}

0 0
原创粉丝点击