首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个KMP模式匹配算法的实现是正确的吗?

这个KMP模式匹配算法的实现是正确的吗?
EN

Stack Overflow用户
提问于 2017-10-14 16:51:46
回答 1查看 358关注 0票数 0

我正在阅读关于KMP的链接:(http://www.geeksforgeeks.org/searching-for-patterns-set-2-kmp-algorithm/)。

我已经实现了KMP,而不是在相应的链接中给出了正确的答案,有人能告诉我这个KMP的实现是正确的还是错误的吗?如果错了,请解释一下。

下面是我的实现:

代码语言:javascript
复制
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;

    }

}
EN

回答 1

Stack Overflow用户

发布于 2017-10-14 16:55:26

是的,我也是从同样的来源学到了KMP算法。而且您的实现看起来100%正确,完全等同于C++的对应物。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46742670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档