美文网首页
JS实现KMP算法

JS实现KMP算法

作者: 壹豪 | 来源:发表于2019-08-27 09:31 被阅读0次
// 计算next数组
    function calcNext(str) {
        let next = [-1],
            len = str.length,
            i = 1,
            j = -1;
        for (i = 1; i < len; i++) {
            while (str[i] !== str[j + 1] && j > -1) {
                j = next[j];
            }
            if (str[j + 1] === str[i]) {
                j = j + 1;
            }
            next[i] = j;
        }
        return next;
    }

    // source 源字符串
    // match 要匹配的字符串
    // res 保存匹配位置的数组
    function search(source, match) {
        let next = calcNext(match),
            m = source.length,
            n = match.length,
            i = 0,
            j = 0,
            res = [];
        while (i < m - n) {
            if (source[i] === match[j]) {
                i++;
                j++;

                if (j === n) {
                    res.push(i - n);
                    j = next[j - 1] + 1;
                }
            } else {
                if (j === 0) {
                    i++;
                } else {
                    j = next[j - 1] + 1;
                }
            }
        }
        return res;
    }

    let source = '21231212121231231231231232234121212312312312331212123',
        match = 'abba';

    let res = search(source, match);

    console.log(res);

相关文章

  • JS实现KMP算法

  • KMP算法js实现

  • 字符串匹配与KMP算法

    1.朴素字符串匹配算法 2.KMP算法 求前缀函数 实现KMP算法 3.测试代码

  • KMP算法的JS实现

    talk is cheap,show me the code: 参考链接: 阮一峰-字符串匹配的KMP算法[KMP...

  • 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。 ...

  • KMP算法 理解与实现

    KMP算法,背景不必多说,主要想写一写自己对KMP算法的一些理解和其具体实现。关于KMP算法的原理,阮一峰老师的这...

  • KMP算法

    参考文献1.B站灯笼哥2.KMP算法python实现3.如何更好的理解和掌握 KMP 算法?

  • KMP 专题整理

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

  • (303)查找-基于DFA的KMP字符串匹配

    概述 基于DFA的KMP算法。是根据DFA状态转换表来实现。下面是java实现的代码 理论 关于kmp理论部分 《...

  • 对KMP算法的一些理解

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

网友评论

      本文标题:JS实现KMP算法

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