KMP 算法的 JS 实现

时间:2021-09-13 20:03:20   收藏:0   阅读:30

KMP (Knuth-Morris-Pratt) 字符串查找算法可在一个字符串 S 内查找一个词 P 的出现位置。 一个词在不匹配时本身就包含足够的信息来确定下一个匹配可能的开始位置,此算法利用这一特性以避免重新检查先前匹配的字符。

const kmp = (s1, s2) => {
    const n = s1.length;//模式串
    const m = s2.length;//匹配串
    
    if (!m) return 0;//匹配串为空
    let next = new Array(m);//next数组
    next[0] = 0;
    for (let i = 1, j = 0; i < m; i++){
        while (j && s2[i] !== s2[j]) {//不匹配,左移
            j = next[j - 1];
        }
        if (s2[i] === s2[j]) ++j;//匹配 i j右移
        next[i] = j;
    }
	//匹配
    for (let i = 0, j = 0; i < n; i++){
        while (j && s1[i] !== s2[j]) {// 失配 左移
            j = next[j - 1];
        }
        if (s1[i] === s2[j]) ++j;// 匹配 j + 1
        if (j === m) return i - m + 1;
    }
    return - 1;
}

原文:https://www.cnblogs.com/honey-cat/p/15259629.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!