美文网首页
大学被虐了很久的kmp算法

大学被虐了很久的kmp算法

作者: RiceCake1122 | 来源:发表于2020-05-08 20:15 被阅读0次

关键在于实现最长公共前后缀table。一个字符串的最长公共前后缀举例:比如"abcdabc"的最长公共前后缀为“abc”, "aaaa"的最长公共前后缀为“aaa”(不包括自己)。

private boolean kmp(String target, String pattern) {
        int m = target.length(), n = pattern.length();
        int i = 0, j = 0;
        int[] prefixTable = getPrefixTable(pattern);
        while (i < m && j < n) {
            if (target.charAt(i) == pattern.charAt(j)) {
                i++;
                j++;
            } else if (j == 0) {
                i++;
            } else {
                j = prefixTable[j-1];
            }
        }
        return j == n;
    }

    private int[] getPrefixTable(String pattern) {
        int n = pattern.length();
        int[] prefix = new int[n];
        prefix[0] = 0;
        for (int i=1; i<n; i++) {
            int len = prefix[i-1];
            while (pattern.charAt(len) != pattern.charAt(i)) {
                if (len == 0) {
                    len--; break;
                }
                len = prefix[len-1];
            }
            prefix[i] = len + 1;
        }
        return prefix;
    }

相关文章

  • 大学被虐了很久的kmp算法

    关键在于实现最长公共前后缀table。一个字符串的最长公共前后缀举例:比如"abcdabc"的最长公共前后缀为“a...

  • KMP 专题整理

    KMP 学习记录 kuangbin专题十六——KMP KMP 学习总结 朴素 KMP 算法 拓展 KMP 算法(E...

  • 对KMP算法的一些理解

    最近学到KMP算法,下面讲讲对KMP算法的一些个人理解,希望对大家有帮助! 对于KMP算法的理解: 整个KMP算法...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 问答|KMP算法学习笔记

    问题 目录KMP是什么,做什么用的KMP算法的高效体现在哪如何KMP算法的next数组KMP的代码KMP的时间复杂...

  • KMP算法——寻找子串位置

    KMP算法——寻找子串位置 1、KMP算法简介: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • 字符串匹配 - KMP算法

    前面我们介绍非常高效的 BM 算法,今天我们介绍另一个非常出名且高效的 KMP 算法。 KMP 算法思想 KMP ...

  • 串的模式匹配算法

    KMP算法 算法匹配

  • KMP算法及优化

    转载请注明出处: KMP算法及优化 今天看到同学在复习数据结构书上的KMP算法,忽然发觉自己又把KMP算法忘掉了,...

  • KMP算法(字符串匹配问题)

    一、是什么? 注意,是KMP算法,不是MMP哈,我没有骂人。KMP算法是用来做字符串匹配的,除了KMP算法分,还有...

网友评论

      本文标题:大学被虐了很久的kmp算法

      本文链接:https://www.haomeiwen.com/subject/drmqnhtx.html