算法KMP字符串匹配算法

Posted chsobin

tags:

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

【原理】

(1)next数组原理

 (2)特殊情况的处理(巧妙增设哨兵)

(3)递推法构造next[]表

 

 

【实现代码】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int maxn = 100;
char t[maxn];   //text
char p[maxn];
int next[maxn];

void getNext(){
     int m = strlen(p);
     int j=0;     //"主串指针" 
     next[0] = -1;
     int t = -1; //模式串指针 
     while(j<m-1){
         if(t<0 || p[j]==p[t]){
            next[++j] = ++t;     
        } 
        else{
            t=next[t];
        } 
     }       
} 

int KMP(){
    getNext();    //构造next表
    int n = strlen(t), i=0;//文本串长度 
    int m = strlen(p), j=0; //模式串长度
    while(j<m && i<n){
        if(j<0 || t[i]==p[j]){    //若匹配,一起前进 
            i++;
            j++;
        }    
        else{        //否则,p右移,t不退回 
            j=next[j];
        }
    } 
    return i-j;        
}


int main(){
    cin >> t; // abcdefgabkdabcdu
    cin >> p; // abkdab
    cout << KMP();
    return 0;
}
View Code

 

【参考资料】

邓俊辉教授数据结构

 

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

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

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

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

KMP(字符串匹配算法)

算法KMP字符串匹配算法

数据结构 字符串 模式匹配问题 KMP算法