题解 | #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
};
全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务