字符串为ababaaab,计算next函数值和nextval函数值
时间: 2023-05-24 08:03:03 浏览: 421
A:
首先,计算 next 函数值:
1. i=0, j=-1,next[0]=-1;
2. i=1,j=0,next[1]=0;
3. i=2,j=0,由于 P[2]=a ≠ P[0]=a,所以 next[2]=0;
4. i=3,j=1,由于 P[3]=b ≠ P[1]=b,所以 next[3]=1;
5. i=4,j=2,由于 P[4]=a ≠ P[2]=a,所以 next[4]=0;
6. i=5,j=0,由于 P[5]=a ≠ P[0]=a,所以 next[5]=0;
7. i=6,j=1,由于 P[6]=a ≠ P[1]=b,需要回溯,此时 j=next[1]=0,由于 P[6]=a ≠ P[0]=a,继续回溯,此时 j=next[0]=-1,发现匹配失败,所以 next[6]=-1;
8. i=7,j=0,由于 P[7]=a ≠ P[0]=a,所以 next[7]=0。
得到 next 数组为:[-1, 0, 0, 1, 0, 0, -1, 0]。
接下来,计算 nextval 函数值:
在计算 nextval 前,需要先根据 next 数组处理出 val 数组,过程如下:
1. 令 val[0]=-1;
2. 从 i=1 开始,若 next[i]=-1,则 val[i]=-1;
3. 若 next[i]=0,则 val[i]=-1;
4. 若 next[i]!=0 且 P[i] ≠ P[next[i]],则 val[i]=next[i];
5. 若 next[i]!=0 且 P[i] = P[next[i]],则 val[i]=val[next[i]];
得到 val 数组为:[-1, -1, 0, 1, 0, -1, -1, 0]。
接下来,根据 val 数组计算 nextval 数组:
1. 令 nextval[0]=-1;
2. 从 i=1 开始,若 val[i]=-1,则 nextval[i]=-1;
3. 若 val[i]!=-1,则 nextval[i]=val[i];
4. 若 val[i] = i-1,则 nextval[i]=nextval[val[i]];
5. 若 val[i]!=-1 且 val[i] ≠ i-1,则 nextval[i]=val[i];
得到 nextval 数组为:[-1, -1, -1, 1, -1, -1, -1, 1]。
阅读全文