您的位置:首页 > 其它

串的模式匹配改进--KMP算法

2012-10-18 16:11 169 查看
改进之处:每当匹配过程中出现相比较的字符不相等时,不需要回溯主串的字符位置指针,而是利用已经得到的“部分匹配”结果,将模式串向右“滑动”尽可能远的距离,再比较。(尽可能远的距离根据模式串next函数确定)

//模式串next说明:比如“abababb”,next[]={-1,0,0,1,2,1,2}

s为主串,p为关键字

void Get_next(char *p,int next[])
{
int i,j,slen;
slen=strlen(p);i=0;
next[0]=-1;j=-1;
while(i<slen)
{
if(j==-1||p[i]==p[j]){++i;++j;next[i]=j;}
else j=next[j];
}
}

int Index_KMP(char *s,char *p,int pos,int next[])
{
int i,j,slen,plen;
i=pos-1;
j=-1;
slen=strlen(s);
plen=strlen(p);
while(i<slen&&j<plen)
{
if(j==-1||s[i]==p[j]){++i;++j;}
else j=next[j];
}
if(j>=plen) return i-plen;
else return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: