#include<iostream>
#include<string>
using namespace std;
void GetNext(string &s,int next[])
{
int i=1,j=0; //初始化 1开始
next[i]=j;
while(i<s.length()){
if(j==0 || s[i]==s[j]){
i++;
j++;
next[i]=j;
}
else{
j=next[j];
}
}
}
int Index_Kmp(string ss,string s,int next[]){
int i=1,j=1;
while(i<ss.size() && j<s.size()){
if(j==0 || ss[i]==s[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>=s.size()){
return 1;
}
return 0;
}
int main(){
string ss=" ABABJHSJUHSJABADCA";
string s1=" ABADC"; //因为下标从1开始了
int next[1000];
GetNext(s1,next);
int temp=Index_Kmp(ss,s1,next);
cout<<temp;
return 0;
}
10-13
10-13