您的位置:首页 > 其它

KMP数组之应用之 最长重复子串的求取(不太好形容)

2013-04-02 09:43 260 查看
#define N 100
int next
;
int getNext(char *des)
{
int i;//i为串的后缀
int j;//j为串的前缀
i=0;
j=-1;
next[i]=-1;
while(i<strlen(des))
{
if(j==-1||des[i]==des[j])
{
i++;j++;//前缀和后缀后移
//next[i]=j;//无优化
if(des[i]!=des[j])
{
next[i]=j;
}
else
next[i]=next[j];//回溯到底
}
else
{//前缀回溯
j=next[j];
}
}
return i;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* des=new char[100];
char* str="ababa";
strcpy(des,str);

getNext(des);
printf("%d",next[strlen(des)]);
return 0;
}

需要修改的仅仅是求取NExt数组的循环次数,这里需要求取到整个子串下一个串的next

到此为止,KMP算法完毕
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐