KMP匹配算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP匹配算法相关的知识,希望对你有一定的参考价值。

  KMP算法可以在O(n+m)的时间数量上完成串的模式匹配操作。

  n指的是主字符串的长度,m指的是模式字符串的长度。

 

  求next数组的算法:

void get_next(char T[], int next[]) {
    i = 1;
    next[1] = 0;
    j = 0;
    while( i <= T[0]) {
        if(j == 0 || T[i] == T[j]) {
            ++i;
            ++j;
            next[i] = j;
        }
        else
            j = next[j];
    }
}

 

  KMP匹配算法:

int KMP(char S[], char T[], int next[], int pos) {
    i = pos;
    j = 1;
    while(i <= S[0] && j <= T[0]) {
        if(j == 0 || S[i] == T[j]) {
            ++i;
            ++j        }
        else
            j = next[j];
    }
}

 

  KMP算法的主要优点是主串不回溯,且在主串与子串有很多“部分匹配”时才显得快。

 

以上是关于KMP匹配算法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构—串KMP模式匹配算法

KMP算法

字符串匹配(KMP 算法 含代码)

KMP算法解决字符串匹配问题(详细步骤图解)

BF与KMP算法的初步认知

Kmp算法浅谈