kmp算法模板

int nextt[1000005];
void get_nextt(char pattern[]){//为pattern字符串创建nextt数组
    nextt[0] = 0;
    int max_length = 0;
    for(int i = 1;pattern[i];i++){
        while(max_length > 0 && pattern[max_length] != pattern[i])
            max_length = nextt[max_length-1];
        if(pattern[i] == pattern[max_length])
            max_length++;
        nextt[i] = max_length;
    }
}
queue<int> search(char text[],char pattern[]){//从test字符串中,寻找含有多少个pattern字符串,并将其开头位置存入队列中
    queue<int> q;
    int pattern_length = strlen(pattern);
    get_nextt(pattern);
    int count = 0;
    for(int i = 0;text[i];i++){
        while(count > 0 && pattern[count] != text[i])
            count = nextt[count-1];
        if(pattern[count] == text[i])
            count++;
        if(count == pattern_length){
            q.push(i-pattern_length+1 );
            count = nextt[count-1];
        }
    }
    return q;
}
全部评论

相关推荐

03-11 10:06
已编辑
河南师范大学 C++
点赞 评论 收藏
分享
03-10 14:19
已编辑
重庆邮电大学 前端工程师
球Offer上岸👑:测试也难求一面 逆天
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务