字符串匹配算法

来源:互联网 发布:外贸搜客户软件 编辑:程序博客网 时间:2024/06/14 11:07

在做字符串之类的题目的时候,字符串匹配算法是经常需要的。下面给出经典的KMP算法:

void compute_prefix(string pattern, int *prefix){    int len=pattern.size();    prefix[0]=-1;    int k=-1;    for(int q=1 ; q<len ; q++){        while(k>-1 && pattern[k+1]!=pattern[q])            k=prefix[k];        if(pattern[k+1]==pattern[q])            k++;        prefix[q]=k;    }}int kmp_match(const string& target, const string& pattern){    int target_len=target.size();    int pattern_len=pattern.size();    int *prefix=new int[pattern_len];    int q=-1;    compute_prefix(pattern,prefix);    for(int i=0 ; i<target_len ; i++){        while(q>-1 && pattern[q+1]!=target[i])            q=prefix[q];        if(pattern[q+1]==target[i])            q++;        if(q==pattern_len-1)            return i-pattern_len+1;    }    return -1;}

compute_prefix是计算前缀数组用的。

原创粉丝点击