您的位置:首页 > 其它

KMP——CODEVS1204 寻找子串位置

2017-03-14 15:33 274 查看
http://codevs.cn/problem/1204/

裸的Kmp吧

(Pascal的可以用pos水过我就不说了)

具体见我前一篇说Kmp的文章,这里不再展开谢谢

#include<bits/stdc++.h>
using namespace std;
int nex[1000001],l1,l2;
char a[1000001],b[1000001];
int main()
{
scanf("%s",a+1);
scanf("%s",b+1);
l1=strlen(a+1);l2=strlen(b+1);
int j=0;
for(int i=2;i<=l2;i++){
while(j&&b[i]!=b[j+1])j=nex[j];
if(b[i]==b[j+1])j++;
nex[i]=j;
}
j=0;
for(int i=1;i<=l1;i++){
while(j&&a[i]!=b[j+1])j=nex[j];
if(a[i]==b[j+1])j++;
if(j==l2){printf("%d\n",i-l2+1);break;}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp