题解 | #kmp算法#

kmp算法

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算模板串S在文本串T中出现了多少次
 * @param S string字符串 模板串
 * @param T string字符串 文本串
 * @return int整型
 */
function kmp( S ,  T ) {
    let res = 0; 
    let next = new Array(S.length).fill(0);
    getNextIndex(S, next);
    let j=0;
    for(let i = 0;i < T.length;i++)
        {
            while(j > 0 && T[i] != S[j])
                j = next[j - 1];
            if(T[i] == S[j])
                j++;
            if(j == S.length)
            {
                res++;
                j = next[j - 1];
            }
        }
    return res;
    
}

function getNextIndex(S, next) {
    let j = 0;
    let i = 1;
    for(let i = 1; i< S.length; i++) {
        while(j > 0 && S[i] != S[j])
            j = next[j - 1];
        if( S[i] == S[j] ) {
            j++;
        }
        next[i] = j;
    }
}


module.exports = {
    kmp : kmp
};
全部评论

相关推荐

牛客618272644号:佬携程工作怎么样,强度大吗
点赞 评论 收藏
分享
11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务