美文网首页
KMP算法(javascript实现)

KMP算法(javascript实现)

作者: 小杰66 | 来源:发表于2021-04-21 08:16 被阅读0次

KMP算法是很经典的字符串匹配算法,主要通过部分匹配表来提高匹配效率。
具体的算法步骤可以看文章这里。下面附javascript的实现代码。

1.首先需要对待搜索字符串生成部分匹配表,代码如下。

function createPartialMatch(search) {
  let map = {};
  for (let i = 0; i < search.length; i++) {
    if (i === 0) {
      map[i] = 0;
    } else {
      let str = search.substr(0, i + 1);
      for (let j = 0; j < i; j++) {
        // 获取前缀
        let beforestr = str.substr(0, j + 1);
        // 获取后缀
        let afterstr = str.substr(-j - 1);
        if (beforestr === afterstr) {
          map[i] = beforestr.length;
        }
        if (!map[i]) {
          map[i] = 0;
        }
      }
    }
  }
  return map;
}

2.依次比较,首位不匹配则进一位,否则移动位数等于已匹配的字符数减去上面得到的部分匹配值,代码如下。

function match(str, search) {
  let map = createPartialMatch(search);
  let i1 = 0,
    i2 = 0;
  let l1 = str.length,
    l2 = search.length;
  while (i1 <= l1 - l2) {
    let j = 0;
    for (i2 = 0; i2 < l2; i2++) {
      if (search[i2] === str[i1]) {
        j++;
        i1++;
        if (j === l2) {
          return [i1 - l2, i1];
        }
      } else {
        //移动位数 = 已匹配的字符数 - 对应的部分匹配值
        //至少移动一位
        i1 += j - map[i2 - 1] || 1;
        break;
      }
    }
  }
}

相关文章

  • javascript实现KMP算法

    假设 源字符串source为abcdabceedabcdabcdee,长度为m。 要匹配字符串match为abcd...

  • KMP算法(javascript实现)

    KMP算法是很经典的字符串匹配算法,主要通过部分匹配表来提高匹配效率。具体的算法步骤可以看文章这里[http://...

  • 字符串匹配与KMP算法

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

  • 算法(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算法...

  • Swift 实现KMP算法

    使用swift语言实现了一下KMP算法,具体代码如下 详细的描述了KMP算法推导next数组的流程 改进后的nex...

网友评论

      本文标题:KMP算法(javascript实现)

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