美文网首页
算法——KMP初识

算法——KMP初识

作者: godream | 来源:发表于2017-02-14 18:02 被阅读0次

思想及探究看文末参考链接
得到next数组的代码
(思想上的巨坑,一直理解next[0]表示的是匹配字符串第零位对应部分匹配值,后来才发现next[0]表示的是第零位前面的最大匹配数,所以才初始为-1)

private static int[] genNext(String p) {
        char[] chars = p.toCharArray();
        int length = p.length();
        int[] next = new int[length];

        int k = -1;
        int j = 0;
        next[0] = k;

        while (j < length - 1) {
            if (k == -1 || chars[j] == chars[k]) {
                k++;
                j++;
                if (chars[j] != chars[k]) {//对abab,abcabc等类似字符串计算next时的优化
                    next[j] = k;
                } else {
                    next[j] = next[k];
                }
            } else {//运用递归思想
                k = next[k];
            }
        }

        return next;
    }

字符串匹配代码

private static int indexOfString(String s, String p) {
        int[] next = genNext(p);
        char[] sChars = s.toCharArray();
        char[] pChars = p.toCharArray();
        int sLen = s.length();
        int pLen = p.length();
        int i = 0, j = 0;

        while (i < sLen && j < pLen) {
            if (j == -1 || sChars[i] == pChars[j]) {
                i++;
                j++;
            } else {
                j = next[j];
            }
        }

        return j == pLen ? i - j : -1;
    }

参考链接

字符串匹配的KMP算法 零基础可看懂
从头到尾彻底理解KMP 从简至深(作者重新整理过但还是有点乱),到扩展BM算法和Sunday算法

相关文章

  • 算法——KMP初识

    思想及探究看文末参考链接得到next数组的代码(思想上的巨坑,一直理解next[0]表示的是匹配字符串第零位对应部...

  • KMP 专题整理

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

  • 对KMP算法的一些理解

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

  • KMP算法文章合集

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

  • 串的模式匹配算法

    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算法,不是MMP哈,我没有骂人。KMP算法是用来做字符串匹配的,除了KMP算法分,还有...

网友评论

      本文标题:算法——KMP初识

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