kmp模板(HD1711)

来源:互联网 发布:网络情歌对唱110首 编辑:程序博客网 时间:2024/06/08 07:20
虽然看的有点凌乱但是大概知道它是怎么搞得了,只是简单的了解了子串自我匹配的过程,和与模串匹配的过程,所以写了一下代   带你去找它 ~
#include<stdio.h>#include<string.h>int next[10005],n,m;int a[1000005],b[10005];void getnext(){int i,j=0;next[1]=0;for(i=2;i<=m;i++){while(j>0&&b[i]!=b[j+1])j=next[j]; if(b[i]==b[j+1]) j+=1;     next[i]=j;}}int kmp(){int i,j=0;for(i=1;i<=n;i++){while(j>0&&a[i]!=b[j+1])j=next[j];if(a[i]==b[j+1])j++;if(j==m)return i-m+1;}return 0;}int main(){int t,i,j;scanf("%d",&t);while(t--){memset(next,0,sizeof(next));memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<=m;i++)   scanf("%d",&b[i]);getnext();if(!kmp())puts("-1");elseprintf("%d\n",kmp());}return 0;}

码。
原创粉丝点击