如果一个模式串 'abab' 的 next 数组是 [0, 1, 0, 1],那么根据 KMP 算法,当该模式串和主串 'abacabad' 进行匹配时,如果模式串的第二个 'b' (index 3) 与主串的 'c' 字符失配,则下一步模式串会从哪个位置开始与主串比较?
答案解析
核心考点说明:本题考察KMP算法中利用next数组进行失配处理的关键步骤。解题思路分析:当模式串的第j个字符与主串失配时,模式串需要回溯到next[j-1]的位置,继续匹配。因为题中是第二个'b'失配(index=3),故查阅next数组的值,next[3-1]=next[2]=0,故从index=0 开始匹配。选项分析:A选项是正确的,因为next[2]是0,模式串从起始位置重新开始比较。B,C,D选项都是不正确的,因为next[2]的值为0,不是1,2或3。易错点提醒:关键理解当出现匹配失败时,下一步比较的位置是由失配位置的前一个位置对应的next值决定的,而不是失配位置本身的next值。
正确答案:A