kmp 算法 理解

我晕了,其中的逻辑没理解,从里面转不出来,不知为啥

为防止遗忘,记忆

函数值的计算,见百度

#include <stdio.h>

void kmp(char *p,int next[])
{
	int i;

	int j=0;
	int k=-1;
	next[0]=-1;

	while(p[j]!='\0')
	{		
		if(k==-1||p[j]==p[k])
		{
			j++;
			k++;

			if(p[j]!=p[k])
				next[j]=k;
			else
				next[j]=next[k];

		}else
		{
			k=next[k];
		}
	}

	for(i=0;i<j;i++)
		printf("%d ",next[i]);
	printf("\n");
}

int main()
{
	char str[10]={'a','b','c','a','c'};

	int n[10];

	kmp(str,n);

	return 0;
}

  

原文地址:https://www.cnblogs.com/jackes/p/2431816.html