您的位置:首页 > 其它

字符串匹配算法SMA 总结之三:KMP算法

2010-06-10 15:10 465 查看
//Knuth-Morris-Pratt algorithm

//preprocessing
//next array
void get_next(int*next,const char*pattern,const int pattern_len)
{
int i=0;
int j=-1;
next[0]=-1;
while(i<pattern_len){
if (j==-1||pattern[i]==pattern[j]){
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
}

int kmp(const char* text,const int text_len,const char* pattern,const int pattern_len)
{
int* next=new int[pattern_len];

//preprocessing
get_next(next,pattern,pattern_len);
//searching
int i=0;
int j=0;
while (i<text_len&&j<pattern_len){
if (j==0||text[i]==pattern[j]){
i++;
j++;
}else{
j=next[j];
}
}
delete[] next;

if (j>=pattern_len){
return i-j;
}else{
return -1;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: