#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int ne[1005];
char s[1001], f[1001];
int xlen, ylen;
void getnext(char *a)
{
int len = strlen(a);
int i = 0, j = -1;
ne[0] = -1;
while(i < len)
{
if(j == -1 || a[i] == a[j])
{
i++;
j++;
ne[i] = j;
}
else j = ne[j];
}
}
int KMPsearch(char *x, char *y)
{
getnext(y);
int i = 0, j = 0;
while(i < xlen && j < ylen)
{
if(j == -1 || x[i] == y[j])
{
i++;
j++;
}
else j = ne[j];
}
if(j == ylen) return i - j + 1;
else return -1;
}
int main()
{
scanf("%s %s", &s, &f);
xlen = strlen(s);
ylen = strlen(f);
//getnext(f);
cout << KMPsearch(s, f) << endl;
/*for(int i = 0; i < strlen(f); i++)
printf("%d ", ne[i]);
printf("\n");*/
return 0;
}
KMP字符串匹配 (储备)
最新推荐文章于 2022-02-11 08:49:08 发布