规定第一个元素对于的next数组中的值为-1,第二个元素对应的值为0,对于这个数组 ababaabaa,求它的next数组
时间: 2024-03-30 08:40:24 浏览: 13
根据 KMP 算法的 next 数组定义,next 数组是一个与原数组等长的数组,其中 next[i] 表示原数组中以第 i 个元素结尾的子串的最长公共前后缀长度。
对于字符串 "ababaabaa",它的 next 数组为:
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| ---- | - | - | - | - | - | - | - | - | - |
| a[i] | a | b | a | b | a | a | b | a | a |
| next[i] | -1 | 0 | 0 | 1 | 2 | 1 | 2 | 3 | 4 |
其中,next[0]=-1 表示第一个字符没有前缀,next[1]=0 表示第二个字符只有一个前缀,即第一个字符。接下来,我们从第二个字符开始计算 next 数组:
- 对于第二个字符 'b',它没有前缀,因此 next[2]=0。
- 对于第三个字符 'a',它的前缀是第一个字符 'a',但是它的前缀的长度为 1,不能与自己匹配,所以 next[3]=0。
- 对于第四个字符 'b',它的前缀是第二个字符 'b',它的前缀的长度为 1,不能与自己匹配,所以 next[4]=1。
- 对于第五个字符 'a',它的前缀是第三个字符 'a',它的前缀的长度为 1,不能与自己匹配,所以 next[5]=2。
- 对于第六个字符 'a',它的前缀是第四个和第三个字符 'ba',它们的前缀的长度为 1 和 0,不能与自己匹配,所以 next[6]=1。
- 对于第七个字符 'b',它的前缀是第五个和第四个字符 'aba',它们的前缀的长度为 1 和 1,不能与自己匹配,所以 next[7]=2。
- 对于第八个字符 'a',它的前缀是第六个和第五个和第四个字符 'baa',它们的前缀的长度为 1 和 2 和 1,不能与自己匹配,所以 next[8]=3。
- 对于第九个字符 'a',它的前缀是第七个和第六个和第五个和第四个字符 'abaa',它们的前缀的长度为 2 和 1 和 2 和 1,可以与自己匹配,所以 next[9]=4。