您的位置:首页 > 其它

kmp 模板

2017-10-05 13:08 169 查看
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int t,cnt,_next[maxn];
char s[maxn],a[maxn];
void get_next(char *s,int n)
{
int i=0,j=-1;
_next[0]=-1;
while(i<n)
{
while(j!=-1&&s[i]!=s[j])
j=_next[j];
i++;
j++;
if(j>=n)
_next[i]=_next[j-1];
else
_next[i]=j;
}
}
void kmp(char *a,int n,char *s,int m)
{
cnt=0;
get_next(s,m);
int i=0,j=0;
while(i<n)
{
while(j!=-1&&a[i]!=s[j])
j=_next[j];
i++;
j++;
if(j>=m)
{
j=_next[j];
cnt++;
}
}
printf("%d\n",cnt);
}
int main()
{
scanf("%d",&t);
while(t--&&scanf("%s%s",s,a)!=EOF)
kmp(a,strlen(a),s,strlen(s));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: