题解 | kmp算法

kmp算法

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

使用kmp算法,在每次匹配时count++,记录个数

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

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

    return count

}
module.exports = {
    kmp : kmp
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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