#include
using namespace std;
void Next(char T[],int next[])
{ next[0]=-1;
int j=0,k=-1;
while(T[j]!="\0")
if((k==-1)||(T[j]==T[k]))
{ j++;
k++;
next[j]=k;
}
else k=next[k];
int KMP(char S[],char T[])
{ int i=0,j=0;
int next[10];
Next(T,next);
while((S[i]!="\0")&&(T[j]!="\0"))
{ if(S[i]==T[j]) {i++;j++;}
else j=next[j];
if(j==-1)
{ i++;j++; }
if(T[j]=="\0") return(i-j+1);
else return 0;
int main()
{ char a[100],b[100];
cout
cin.getline(a,100);
cin.getline(b,100);
if(KMP(a,b)==0)
else cout
return 0;
具體的你自己看吧。
#include
using namespace std;
void Next(char T[],int next[])
{ next[0]=-1;
int j=0,k=-1;
while(T[j]!="\0")
if((k==-1)||(T[j]==T[k]))
{ j++;
k++;
next[j]=k;
}
else k=next[k];
}
int KMP(char S[],char T[])
{ int i=0,j=0;
int next[10];
Next(T,next);
while((S[i]!="\0")&&(T[j]!="\0"))
{ if(S[i]==T[j]) {i++;j++;}
else j=next[j];
if(j==-1)
{ i++;j++; }
}
if(T[j]=="\0") return(i-j+1);
else return 0;
}
int main()
{ char a[100],b[100];
cout
cin.getline(a,100);
cout
cin.getline(b,100);
if(KMP(a,b)==0)
cout
else cout
return 0;
}
具體的你自己看吧。