using namespace std;
int main()
{
char c[1000010];
char b[1000010];
while(cin>>c>>b)
{
int n = strlen(c);
int len = strlen(b);
int F[len];
F[0]=0;
int j=0;
int i=1;
while(i<len)
{
if(b[i]==b[j])
{
F[i]=j+1;
i++;
j++;
}
else if(b[i]!=b[j]&&j>0)
{
j=F[j-1];
}
else if(j==0&&b[i]!=b[j])
{
F[i]=F[j];
i++;
}
}
i=0,j=0;
int flag=0;
while(i<n)
{
if(c[i]==b[j])
{
if(j==len-1&&c[i]==b[j])
{
flag=1;
break;
}
i++;
j++;
}
else if(c[i]!=b[j]&&j>0)
{
j=F[j-1];
}
else if(j==0&&c[i]!=b[j])
{
i++;
}
}
if(flag==1)
cout<<i-j+1<<endl;
else
cout<<"-1"<<endl;
}
return 0;
}
KMP的简单应用
最新推荐文章于 2022-11-25 11:25:37 发布