已知字符串S = 'abababca',模式串T = 'ababca'。在使用KMP算法进行模式匹配时,当S的第7个字符'c'与T的第6个字符'a'发生失配时,模式串T下一步将从哪个位置开始与S的第7个字符重新比较?假设next数组的下标从1开始。
答案解析
核心考点说明:KMP算法中next数组的含义和应用。
解题思路分析:首先需要计算模式串T的next数组,然后根据next数组的值确定失配时模式串T的下一个比较位置。
对于模式串T='ababca',其next数组如下:
- next[1] = 0 (根据定义)
- next[2] = 1 (T[1,1] 无公共前后缀)
- next[3] = 1 (T[1,2]='ab', 无公共前后缀)
- next[4] = 2 (T[1,3]='aba', 最长公共前后缀为'a', 长度为1,next[4] = 1+1 =2 )
- next[5] = 3 (T[1,4]='abab', 最长公共前后缀为'ab',长度为2, next[5] = 2+1=3)
- next[6] = 1 (T[1,5]='ababc', 无公共前后缀)
当S[7]与T[6]失配时,根据next[6] = 1,模式串T将从第1个字符开始与S[7]重新比较。
选项分析:
- A. 正确。根据next[6]=1,模式串将从T的第一个字符开始重新比较。
- B. 错误。 next[6]不等于2。
- C. 错误。 next[6]不等于3。
- D. 错误。 next[6]不等于4。
易错点提醒:next数组的计算是KMP算法的关键,理解next[j]表示当T[j]失配时,模式串T下一个比较的位置是至关重要的。注意next数组下标和字符串下标通常从1开始。
正确答案:A