已知字符串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
随机推荐
开始刷题