串的KMP匹配

KMP算法下面只写个代码, 网上有很多讲解(还没见一个讲得很清楚的, 用文字也确实难讲清楚), 想学习的直接看严大妈的视频讲解严蔚敏KMP讲解, 多看几遍总能懂.

typedef char String[225];

// get_next数组
void get_next(String T, int *next) {
    int i = 1;
    int j = 0;
    next[1] = 0;
    while (i < T[0]) {
        if (j == 0 || T[i] == T[j]) {
            ++i;
            ++j;
            if (T[i] != T[j]) next[i] = j;
            else T[i] = next[j];
            
        } else {
            j = next[j];
        }
    }
    
}

int get_KMP(String S, String T, int pos) {
    int i = pos;
    int j = 1;
    int next[255];
    get_next(T, next);
    while (i <= S[0] && j <= T[0]) {
        if (j == 0 || T[j] == S[i]) {
            ++i;
            ++j;
        } else {
            j = next[j];
        }
    }
    if (i > S[0]) {
        return 0;
    } else {
        return i - T[0];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容