@zhangche0526
2017-02-25T06:27:40.000000Z
字数 446
阅读 717
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXL=1000;
char T[MAXL+1],P[MAXL+1];
int next[MAXL+1];
int kmp()//返回T中P第一次出现的起始位置
{
int Tl=strlen(T),Pl=strlen(P);
int i,j;
next[0]=next[1]=0;
//初始化next数组
for(i=1;i<Pl;i++)
{
j=next[i];
while(j&&P[i]!=P[j]) j=next[j];
next[i+1]=(P[i]==P[j])?j+1:0;
}
//
j=0;
for(i=0;i<Tl;i++)
{
while(j&&P[j]!=T[i]) j=next[j];
if(P[j]==T[i]) ++j;
if(j==Pl)
return i-Pl+1;
}
}
int main()
{
cin>>T>>P;
cout<<kmp();
return 0;
}