/*改进版KMP算法——改进求next数组的算法*/
//改进的求next数组算法
void GetNextval(SqString t,int nextval[])
{
int j=0,k=-1;
nextval[0]=-1;
while(k<t.len)
{
if(k==-1 || t.ch[j]==t.ch[k])
{
k++;j++;
//改进的地方
if(t.ch[j]!=t.ch[k])
{
nextval[j]=k;
}
else
{
nextval[j]=nextval[k];
}
}
else
{
k=nextval[k];
}
}
}
//修正的KMP算法
int KMPIndexval(SqString s,SqString t)
{
int nextval[MaxSize],i=0,j=0,v;
GetNextval(t,nextval);
while(i<s.len && j<t.len)
{
if(j==-1 || s.ch[i]==t.ch[j])
{
j++;k++;
}
else
{
j=next[j];
}
}
if(j>t.len)
{
v=i-len;
}
else
{
v=-1;
}
return v;
}
KMP算法(改进版)
最新推荐文章于 2023-05-21 16:48:09 发布