//字符串匹配的KMP算法 #include <iostream> #include <string.h> using namespace std; #define N 100 void GetNext(char *str,int *next) { next[0]=-1; int k=-1; int j=0; int len=strlen(str); while (j<len) { if(k==-1 || str[j]==str[k]) { j++; k++; if(str[j]!=str[k]) next[j]=k; else next[j]=next[k]; } else k=next[k]; } } void KMP(char *s1,char *s2) //s1是原串,s2是模式串 { int i,j=0; int nextval[N]; int len1=strlen(s1); int len2=strlen(s2); GetNext(s2,nextval); for(i=0;i<len1;i++) { if(s1[i]!=s2[j]) { if(nextval[j]==-1) for(j=1;j<len2;j++) { if(nextval[j]!=-1) break; } else j=nextval[j]; } else { j++; if(j==len2) { cout<<"yes"<<endl; break; } } } if(j!=len2) cout<<"no"<<endl; } int main() { char s1[N],s2[N]; cin>>s1>>s2; KMP(s1,s2); return 0; }