您的位置:首页 > 其它

KMP模板

2013-08-27 20:53 197 查看
void get_next(const string sub, int *next)
{
int len=sub.length();
int i,k;
next[0]=k=-1;
for (i=0; i<len;)
{
if (k==-1 || sub[i]==sub[k])
{
k++; i++;
if (sub[k]!=sub[i]) next[i]=k;
else next[i]=next[k];    //避免重复计算优化next数组
}
else k=next[k];
}
}

int KMP(const string str, const string sub, const int *next)    //返回子串在主串中的起始位置下标
{
int i,j;
int len1=str.length();
int len2=sub.length();
for (i=0, j=0; i<len1 && j<len2;)
{
if (j==-1 || str[i]==sub[j])
{
i++; j++;
}
else
{
j=next[j];
}
}
if (j==len2) return i-len2;
return -1;    //如果找不到就返回-1
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: