题解 | #kmp算法#

kmp算法

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算模板串S在文本串T中出现了多少次
 * @param S string字符串 模板串
 * @param T string字符串 文本串
 * @return int整型
 */
//求模板串的next数组,注意S和T字符串,下标从0开始算起,所以与王道书籍的代码相比有所改动。
void GetNext(char S[],int next[]){
    next[1]=0;
    int i=1,j=0;
    while(i<=strlen(S)){
        if(j==0||S[i-1]==S[j-1]){
            i++;j++;
            next[i]=j;
        }
        else j=next[j];  
    }
}

int kmp(char* S, char* T ) {
    int a=strlen(S),num=0;
    int next[a+2];
    GetNext(S,next);
    for(int i=0,j=0;i<strlen(T);){
        if(S[j]==T[i]){
            i++;j++;
            if(j==strlen(S)){
                num++;
                j=next[j+1]-1;                
            }
        }
        else{
            if(j==0) i++;
            else j=next[j+1]-1;;
        }         
    }
    return num;
}

全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务