如我所见,在 KMP 中构建故障/前缀表的主要功能(在所有在线资源中,即使在此答案中_ 如下:
int j = 0;
for (int i = 1; i < pattern.length(); i++) {
while (j > 0 && pattern.charAt(j) != pattern.charAt(i)) {
j = failure[j - 1];
}
if (pattern.charAt(j) == pattern.charAt(i)) {
j++;
}
failure[i] = j;
}
我无法理解这部分:
j = failure[j - 1];
为什么我们不这样做,j--
而不是返回字符串?我们如何知道j
使用失败的表进行更新是正确的?