![](/img/trans.png)
[英]Is this pattern finding method better than KMP or Z-Algorithm implementation?
[英]Is this implementation of KMP pattern matching algorithm is right?
我正在通过以下链接阅读有关KMP的信息:( http://www.geeksforgeeks.org/searching-for-patterns-set-2-kmp-algorithm/ )。
我已经实现了KMP,而不是在相应的链接中给出了答案,它也给出了正确的答案,有人可以告诉我这种KMP实现是对还是错? 如果错误,则请解释相同。
下面是我的实现:
package Algos.patternMatching;
public class KMP {
public static void main(String[] args) {
KMPAlgo("ABABDABACDABABCABAB", "ABABCABAB");
}
private static void KMPAlgo(String text, String pattern) { //check whether right or wrong
int i = 0;
int j = 0;
int[] lps = LPS(pattern);
while (i < text.length() - pattern.length() + 1) {
while (j < pattern.length() && pattern.charAt(j) == text.charAt(i)) {
j++;
i++;
}
if (j == pattern.length()) {
System.out.println(i - j);
}
if (j > 0) {
j = lps[j - 1];
} else {
i++;
}
}
}
private static int[] LPS(String pattern) {
int len = 0;
int i = 0;
int[] lps = new int[pattern.length()];
lps[0] = 0;
i++;
while (i < pattern.length()) {
if (pattern.charAt(len) == pattern.charAt(i)) {
len++;
lps[i] = len;
i++;
} else if (len > 0) {
len = lps[len - 1];
} else {
lps[i] = len;
i++;
}
}
return lps;
}
}
是的,我也从同一来源学到了KMP算法。 而且您的实现似乎100%正确,完全等同于C ++。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.