题目
模式串的t="abcabc" 的next 函数值为( )A.A.A.A.A.
模式串的t="abcabc" 的next 函数值为( )
题目解答
答案
解答过程:
首先,计算出字符串 t 的前缀函数:
P[1] = 0
P[2] = 0
P[3] = 0
P[4] = 1
P[5] = 2
P[6] = 3
然后,通过前缀函数计算出 next 数组的值:
next[1] = -1
next[2] = 0
next[3] = 0
next[4] = 0
next[5] = 1
next[6] = 2
最终得到的 next 数组为:-100121
因此,本题选择选项。
解析
步骤 1:计算前缀函数
前缀函数 P[i] 表示模式串 t 的前 i 个字符的最长公共前后缀的长度。对于模式串 t="abcabc",我们计算前缀函数 P[i] 的值。
- P[1] = 0,因为只有一个字符,没有前缀。
- P[2] = 0,因为 "ab" 没有公共前后缀。
- P[3] = 0,因为 "abc" 没有公共前后缀。
- P[4] = 1,因为 "abca" 的最长公共前后缀是 "a"。
- P[5] = 2,因为 "abcab" 的最长公共前后缀是 "ab"。
- P[6] = 3,因为 "abcabc" 的最长公共前后缀是 "abc"。
步骤 2:计算 next 数组
next 数组的值是前缀函数 P[i] 减去 1。因此,我们根据前缀函数 P[i] 的值计算 next 数组的值。
- next[1] = -1,因为 P[1] = 0,减去 1 得到 -1。
- next[2] = 0,因为 P[2] = 0,减去 1 得到 -1,但 next 数组的值不能为负,所以为 0。
- next[3] = 0,因为 P[3] = 0,减去 1 得到 -1,但 next 数组的值不能为负,所以为 0。
- next[4] = 0,因为 P[4] = 1,减去 1 得到 0。
- next[5] = 1,因为 P[5] = 2,减去 1 得到 1。
- next[6] = 2,因为 P[6] = 3,减去 1 得到 2。
步骤 3:确定最终答案
根据计算得到的 next 数组的值,我们得到 next 数组为:-100121。因此,本题选择选项 C。
前缀函数 P[i] 表示模式串 t 的前 i 个字符的最长公共前后缀的长度。对于模式串 t="abcabc",我们计算前缀函数 P[i] 的值。
- P[1] = 0,因为只有一个字符,没有前缀。
- P[2] = 0,因为 "ab" 没有公共前后缀。
- P[3] = 0,因为 "abc" 没有公共前后缀。
- P[4] = 1,因为 "abca" 的最长公共前后缀是 "a"。
- P[5] = 2,因为 "abcab" 的最长公共前后缀是 "ab"。
- P[6] = 3,因为 "abcabc" 的最长公共前后缀是 "abc"。
步骤 2:计算 next 数组
next 数组的值是前缀函数 P[i] 减去 1。因此,我们根据前缀函数 P[i] 的值计算 next 数组的值。
- next[1] = -1,因为 P[1] = 0,减去 1 得到 -1。
- next[2] = 0,因为 P[2] = 0,减去 1 得到 -1,但 next 数组的值不能为负,所以为 0。
- next[3] = 0,因为 P[3] = 0,减去 1 得到 -1,但 next 数组的值不能为负,所以为 0。
- next[4] = 0,因为 P[4] = 1,减去 1 得到 0。
- next[5] = 1,因为 P[5] = 2,减去 1 得到 1。
- next[6] = 2,因为 P[6] = 3,减去 1 得到 2。
步骤 3:确定最终答案
根据计算得到的 next 数组的值,我们得到 next 数组为:-100121。因此,本题选择选项 C。