您的位置:首页 > 其它

字符串匹配算法MP

2018-01-04 16:55 399 查看
#include<iostream>

using namespace std;

void preMp(const char *x,int m,int preMpNext[]){
int i,j;
i = 0;
j = preMpNext[0] = -1;
while(i<m)
{
while(j > -1 && x[i] != x[j]){
j=preMpNext[j];

}
preMpNext[++i] = ++j;// here "i" will equal m,not right!
// cout << "i:" << i << endl;
}
}
int indexMP(const char *s,int n,const char *p,int m){

int *preMpNext = new int[m];

preMp(p,m,preMpNext);
int i=0,j=0;
while(j<n){
while(i>-1&&p[i]!=s[j])
{
i = preMpNext[i];
}
i++;
j++;
if(i>=m){
return j-i;
}
}

delete []preMpNext;
return -1;
}

int main(){

const char *p = "caatcat";
// s = NULL;
int length = strlen(p);
int *preMpNext = new int[length];

preMp(p,length,preMpNext);

for(int i=0;i<length;i++){
cout << i << ":" << preMpNext[i] <<",";
}
cout << endl;
cout << p << endl;
delete []preMpNext;
char *s2 = "ctcaatcacaatcat";
int index = indexMP(s2,strlen(s2),p,strlen(p));
cout << "index :" << index << endl;

return 0;
}

0:-1,1:0,2:0,3:0,4:0,5:1,6:2,
caatcat
index :8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: