美文网首页
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;
          }
        }
      }
    }
    
    

    相关文章

      网友评论

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

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