您的位置:首页 > 编程语言 > C语言/C++

KMP算法-next数组的含义和求法

2016-11-09 20:22 211 查看
KMP 为字符串的匹配算法,主要定义了一个next数组来实现匹配的跳转

本文章主要讲讲next数组的含义以及求法

next[i]表示以当前第i个字符为结尾的匹配长度

如:

0 1 2 3 4 5 6 7 8 9

a b a b c a b a b

0 0 1 2 0 1 2 3 4 next[i]

void makenext()
{
int i=0;
int j=-1;
next[0]=-1;
int len=s.length();
while(i<len)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}


next数组可以用来求重复子串的长度

(1)i - next[i] 最小循环节(第一个字母开始)

(2)next[i] 最大循环节中的第几位数(此时循环节可交叉)

(3)next[i] != 0 && i % (i - next[i]) == 0,当前是循环节中的最 后一位.

(4)在(3)的前提下 i / (i - next[i]) 表示的最大周期个数,也就是在最小循环节的前提下的最大周期个数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 算法 kmp