KMP

 

void GetNext(string const&str,vector<int>&next)
{
int i=0;
int j=-1;
next[0]=-1;
while(i<(int)str.length())
{
if(j==-1 || str[i]==str[j]){
++i;++j; next[i]=j;
}
else j=next[j];
}
}
int IndexKMP(string &str1,string& str2,int iPos = 0)
{
vector<int> next(str2.length()+1);
GetNext(str2,next);
int i = iPos;
int j=0;
while(i<(int)str1.length()&&j<(int)str2.length())
{
if(j==-1||str1[i]==str2[j]) {
++i;
++j;
}
else{
j = next[j];
}
}
return j==str2.length()? (i-j):-1;
}

posted on 2010-11-10 17:35  SammyLan  阅读(138)  评论(0编辑  收藏  举报

导航