2020-11-23
kmp算法匹配模板
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000;
int Next[1000006];
int Get_NEXT(string p)///找字串的
{
Next[0]=-1;
int j=0;
int k=-1;
while(j<p.length())
{
if(k==-1||p[j]==p[k])
{
j++;
k++;
Next[j]=k;
}
else
k=Next[k];
}
}
int KMP(string s,string p)///主串s,字串p
{
int i=0;
int j=0;
while((i<(int)(s.length()))&&(j<(int)(p.length())))
{
if(j==-1||s[i]==p[j])
{
i++;
j++;
}
else
{
j=Next[j];
}
if(j>=(int)(p.length()))
{
return i-(int)(p.length());
}
}
return 0;
}
int main()
{
string s,p;
cin>>s;
cin>>p;
Get_NEXT(p);
cout<<KMP(s,p);
}