题解 | #kmp算法#

kmp算法

https://www.nowcoder.com/practice/bb1615c381cc4237919d1aa448083bcc

/**

 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

 *

 * 计算模板串S在文本串T中出现了多少次

 * @param S string字符串 模板串

 * @param T string字符串 文本串

 * @return int整型

 */

function kmp(ST) {

    let res = 0;

    let next = nextFun(S);

    let i = 0;

    let j = 0;

    while (i < T.length) {

        if (T[i] == S[j]) {

            i++;

            j++;

        } else if (j > 0) {

            j = next[j - 1];

        } else {

            i++;

        }

        if (j == S.length) {

            res++;

            j = next[j - 1];

        }

    }

    return res;

}

function nextFun(S) {

    let next = [0];

    let prefixLen = 0;

    let i = 1;

    while (i < S.length) {

        if (S[prefixLen] == S[i]) {

            prefixLen++;

            i++;

            next.push(prefixLen);

        } else {

            if (prefixLen == 0) {

                next.push(0);

                i++;

            } else {

                prefixLen = next[prefixLen - 1];

            }

        }

    }

    return next;

}

module.exports = {

    kmp: kmp,

};

全部评论

相关推荐

Java转测开第一人:这种就是饼 把应届当廉价劳动力用完然后丢掉
你觉得今年秋招难吗
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:这跟数分八竿子打不着,先去了解实习要会什么再说找实习吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务