按照递推的思想求解next[]数组
按照递推的思想求解next[]数组
根据定义next[0]=-1,假设next[j]=k, 即P[0...k-1]==P[j-k,j-1]
-
若P[j]P[k],则有P[0..k]P[j-k,j],很显然,next[j+1]=next[j]+1=k+1;
-
若P[j]!=P[k],则可以把其看做模式匹配的问题,即匹配失败的时候,k值如何移动,显然k=next[k]。
因此可以这样去实现:
void getNext(char *p,int *next)
{
int j,k;
next[0]=-1;
j=0;
k=-1;
while(j<strlen(p)-1)
{
if(k==-1||p[j]==p[k]) //匹配的情况下,p[j]==p[k]
{
j++;
k++;
next[j]=k;
}
else //p[j]!=p[k]
k=next[k];
}
}
本文为保持文章完整性可能使用了其他作者的文字,如果影响到您的权益,请与我联系,谢谢理解!
转载本文请注明出处,非作者授权不得用于商业用途。