KMP算法
1 理解KMP算法的几个要点
(1) 首先我们需要知道为什么需要KMP算法?
减少不必要的回溯
(2) 怎样减少不必要的回溯?
借助next数组(当模式匹配串T失配的时候,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配)
1 理解KMP算法的几个要点
(1) 首先我们需要知道为什么需要KMP算法?
减少不必要的回溯
(2) 怎样减少不必要的回溯?
借助next数组(当模式匹配串T失配的时候,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配)
(3) 怎样产生next数组?
(4) 什么是前缀和后缀
void get_next( String T, int *next )
{
j = 0;
i = 1;
next[1] = 0;
while( i < T[0] )
{
if( 0==j || T[i] == T[j] )
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
/*这里的j又被重新打回去重新计数,j就是一个计数器,计数着不匹配的这个元素之前的前
缀和后缀中有几个相同的元素。*/
}
}
}