您的位置:首页 > 其它

luogu3375 kmp算法模板

2017-10-06 19:07 337 查看
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char a[1000005], b[1005];
int lena, lenb, nxt[1005];
void makenext(){
int k=0;
for(int i=2; i<=lenb; i++){
while(k && b[i]!=b[k+1])    k = nxt[k];
if(b[i]==b[k+1])    nxt[i] = ++k;
}
}
void kmp(){
int k=0;
for(int i=1; i<=lena; i++){
while(k && a[i]!=b[k+1])    k = nxt[k];
if(a[i]==b[k+1])    k++;
if(k==lenb) printf("%d\n", i-lenb+1);
}
}
int main(){
scanf("%s", a+1);
scanf("%s", b+1);
lena = strlen(a+1);
lenb = strlen(b+1);
makenext();
kmp();
for(int i=1; i<=lenb; i++)
printf("%d ", nxt[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: