#include<bits/stdc++.h>
using namespace std;
///下标从0开始计,因为字符数组存储是从0开始
void Getnext(char ch[],int next[],int len)
{
next[0]=-1;
int i=0,j=-1;
while(i<len)
{
if(j==-1||ch[i]==ch[j])
{
next[++i]=++j;
}
else
{
j=next[j];
}
}
}
int KMP_match(char s[], char t[],int next[])
{
int lens=strlen(s);
int lent=strlen(t);
int i=0,j=0;
while(i<lens&&j<lent)
{
if(j==-1||s[i]==t[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j>=lent)
{
return i-j+1;
}
else
{
//cout<<"no"<<endl;
return -1;
}
}
int main()
{
char s[]="abcdabe";
char t[]="cd";
int len=strlen(t);
int next[100];
Getnext(t,next,len);
cout<<KMP_match(s,t,next);
return 0;
}