KMP 算法实践

作者: TimberTang | 来源:发表于2018-04-17 15:09 被阅读6次

很多不理解. 先背下来吧

void get_next(String T, int *next) {  
    int i , j;
    next[0] = 1;
    i = 1;
    j = 0;
    while (i < T.size()) { // 循环遍历T
        if (j == 0 || T[i] == T[j]) { // 相同则 往后移动 且存入next 数组
            ++i;
            ++j;
            next[i] = j; // 1 普通kmp 算法
// 改进  kmp算法  
          if (T[i] != T[j]) {
             next[i] = j;
          }else { next[i] = next[j];
        }else {
            j = next[j]; // 不相同则j回溯
        }
    }
}

void index_KMP(String S, String T, int pos) { // 返回子串T, 在主串S种第pos个字符之后的位置. 如不存在 则返回 0
    int i = pos; // i 用于主串S 单签位置下标值
    int j = 1; // j用于子串T的下标值
    int next[255];
    get_next(T, next); // 获取T的next数组
    while (i <= S.size() && j <= T.size()) { // 循环条件
        if (j == 0 || S[i] == T[j]) { // 弱相同则继续往右移动
            ++i; 
            ++j;
        }else { // j返回合适的位置. i 则不变
            j = next[j];
        }
    }
    if (j > T.size()) {
        return j - T.size();
    }else {
        return 0;
    }
}

相关文章

  • KMP 专题整理

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

  • KMP 算法实践

    很多不理解. 先背下来吧

  • 对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/mnzukftx.html