kmp算法板子:
#include<iostream>
using namespace std;
int m,n;
char a[10000],b[10000];
int next[10000];
void NEXT()
{
next[0]=-1;
if(m==1)
return;
else
{
next[1]=0;
int j=1;
int k=next[1];
while(j<n-1)
{
if(k==-1||b[j]==b[k])
next[++j]=++k;
else
k=next[k];
}
}
}
int index()
{
if(m<=0||n<=0||n>m)
return -1;
else
{
NEXT();
int i=0;
int j=0;
while(i<m)
{
if(j==-1||a[i]==b[j])
{
i++;
j++;
}
else
j=next[j];
if(j==n)
return (i-j);
}
return -1;
}
}
int main()
{
cin>>m>>n;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
cout<<index();
return 0;
}