【发布时间】:2018-10-18 23:34:36
【问题描述】:
KMP 算法需要一个前缀表,以便在失败后知道它可以安全地跳过多少个字符。前缀表的总体思路是,它会告诉您对于给定模式P,在给定位置i 和字符C,到C 的后缀与P的前缀:
int[] T = new int[P.length()];
int i = 0;
for (int j = 1; j < P.length(); ++j) {
if (P.charAt(j) == P.charAt(i)) {
i++;
} else {
i = 0;
}
T[j] = i;
}
这就是我想出的。我环顾四周,实现似乎总是不同的。我尝试了几个示例(例如 ABABACA),但我的实现和例如这个KMP prefix table 似乎产生了相同的结果。
谁能告诉我我的实现中的逻辑错误是什么,以及在为 KMP 算法生成正确的前缀表时会失败的输入是什么?
谢谢
【问题讨论】:
标签: algorithm knuth-morris-pratt