#include <iostream>
using namespace std;
int next[110];
void get_next(char t[])
{
int i,j;
i=1;
next[1]=0;
j=0;
while(i<strlen(t))
{
if(j==0||t[i-1]==t[j-1])
{
i++;
j++;
if(t[i-1]!=t[j-1])
next[i]=j;
else
next[i]=next[j];
}
else
j=next[j];
}
}
int kmp(char s[],char t[])
{
get_next(t);
int i,j;
int lens,lent;
i=1;
j=1;
while(i<=strlen(s)&&j<=strlen(t))
{
if(j==0||s[i-1]==t[j-1])
{
i++;
j++;
}
else
j=next[j];
}
if(j>strlen(t))
return i-strlen(t);
else
return 0;
}
int main()
{
char a[20],b[20];
cin>>a>>b;
int ans=kmp(a,b);
cout<<ans<<endl;
return 0;
}
KMP算法裸模版
最新推荐文章于 2024-01-22 22:46:57 发布