算法|KMP算法

const int MAXN = 1000;
const int MAXM = 10000;

int nextTable[MAXN];
int pattern[MAXN];
int text[MAXM];

void getNextTable(int n){
    int i = -1;  // 前缀末尾
    int j = 0;  // 后缀末尾
    nextTable[0]=-1;
    while(j<n){
        if(i==-1 || pattern[i]==pattern[j] ){
            i++;
            j++;
            nextTable[j] = i;
        }
        else
            i=nextTable[i];  // 后缀的位置回退
    }
    return;
}

int KMP(int n, int m){
    getNextTable(n);  //初始化next数组
    int i = 0,j=0;  // i为pattern的指针 j为text的指针
    while(i<n && j < m){
        if(i==-1||pattern[i]==text[j]){
            i++;
            j++;
        }
        else
            i=nextTable[i];  // pattern回退
    }
    if(i==n)  // 模式串匹配结束
        return j-i+1;
    else
        return -1;
    
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容