// +-------+---+-+
// | ... |i-1|i| 求Next(array, i)
// +-------+---+-+
// X
// / \ -------+
// / \ | |
// / \ | |
// 若i-1前面 +---+| |---|v|---|---| 若i-1之前有元素,
// 无元素 | i-1| |...|j|...|i-1| 求得j=Next(i-1),
// 返回 +----| |---|-|---|-|-| 比较array[i-1]与array[j]
// / / \ |
// / / \ |----|
// / / \ |
// 0 j+1 ------|v|---- 若array[i-1]与array[j]不等,
// | ... |j|j+1| 用array[i-1]替换array[j]
// +-----+-+---- 再求Next(array, j+1)
#include <stdio.h>
#include <string.h>
int Next(char array[], int i)
{
int ret = 0;
if ( 0 == i )
ret = -1;
else if ( i == 1 )
ret = 0;
else
{
int j = 0;
int t = 0;
j = Next( array, i-1);
if ( array[j] == array[i-1] )
ret = j+1;
else
{
t = array[i-1];
array[i-1] = array[j];
array[j] = t;
ret = Next(array, j+1);
t = array[i-1];
array[i-1] = array[j];
array[j] = t;
}
}
return ret;
}
void main()
{
int i = 0;
char str[] = "abaabcac";
for ( i=0; i<strlen(str); i++ )
printf("%d ", Next(str, i));
}
KMP算法next数组递归求法
最新推荐文章于 2022-10-09 14:46:21 发布