字符串匹配与KMP算法

1.朴素字符串匹配算法

int naive_matcher_v1(string text,string pattern){
    int n=text.size();
    int m=pattern.size();
    int s,i;
    for(s=0;s

2.KMP算法

求前缀函数

int* prefix_function(string pattern){
    int n=pattern.size();
    int* next=new int[n];    //next[i]=0 for all i=0,1,...,n-1
    int i=1,j=0;
    while(i0){
                j=next[j-1];
            }else{
                next[i]=0;
                ++i;
            }
        }
    }
    return next;
}

实现KMP算法

int kmp(string text,string pattern){
    int* next=prefix_function(pattern);
    int i=0,j=0;
    while(i0){
                j=next[j-1];
            }else{
                ++i;
            }
        }
    }
    if(j==pattern.size()){
        return i-j;
    }else{
        return -1;
    }
}

3.测试代码

void display(int arr[],int n){
    for(int i=0;i

你可能感兴趣的:(字符串匹配与KMP算法)