KMP算法
#include<string>
#include<vector>
#include<stdio.h>
using namespace std;
void get_next(const string str,vector<int>& next)
{
int i=0;
int j=-1;
next[0]=-1;
while(i<str.length)
{
if(j==-1||str[i]==str[j])
{
++i;++j;
if(str[j]!=str[i])
next[i]=j;
else
next[i]=next[j];
}
else
j=next[j];
}
}
以上是next数组的获取函数
int kmp(string str1,string str2,int i)
{
int int j=0;
vector<int>next(str2.size());
get_next(str2,next);
while(i!=str1.length()&&j!=str2.length())
{
if(j==-1||str1[i]==str2[j])
{
++i;++j;
}
else
j=next[j]
}
return j==str2.length()?i-j:-1;
}
浙公网安备 33010602011771号