#include <iostream>
#include <vector>
using namespace std;
int n=next[i-1];
while(n!=-1&&pat[n]!=pat[i-1]){
n=next[n];
}
next[i]=n+1;
}
int i=0;
int j=0;
for(;i<org.size()&&j<pat.size();){
if(org[i]==pat[j]){++i;++j;}
else{
j=next[j];
if(j<0){++i;j=0;}
}
}
if(j==(pat.size()))return 1;
else return 0;
}
int main(int argc, char* argv[]){
string a="aabcabasdaabalksdjf";
string b="abal";
cout<<kmp(a,b);
return 0;
}
#include <vector>
using namespace std;
int kmp(string org,string pat){
vector<int> next(pat.size(),0); next[0]=-1;
for(int i=1;i<pat.size();++i){int n=next[i-1];
while(n!=-1&&pat[n]!=pat[i-1]){
n=next[n];
}
next[i]=n+1;
}
int i=0;
int j=0;
for(;i<org.size()&&j<pat.size();){
if(org[i]==pat[j]){++i;++j;}
else{
j=next[j];
if(j<0){++i;j=0;}
}
}
if(j==(pat.size()))return 1;
else return 0;
}
int main(int argc, char* argv[]){
string a="aabcabasdaabalksdjf";
string b="abal";
cout<<kmp(a,b);
return 0;
}