模式匹配

next[j]=  -1 当j=0;
next[j]=  Max{k|1<k<j  且 'p0...pk-1'=pj-k...pj-1}
next[j]=  0 其他情况
KMP
*/	
#include <stdio.h>
#include <string.h>
int main()
{
	int nextval[20],len ;
	char ptrn[20]="abaabcac";
	len=strlen(ptrn);//串长度
	int i ,u,max=0,k;      
    int j = 0;   
	nextval[j] = -1; 
	
	
	for (j=1;j<len;j++)//当j=?
	{
	    max=0;
		for (k=1;k<j;k++)//当k=?   (k<0<j)
		{
			///////////看 p0...pk-1  = pj-k   pj-1 ?
			for (u=0;u<k;u++)
			{
				if (ptrn[u]!=ptrn[j-k+u])
				break;
			}
			if (u==k && max<k)//如果是匹配结束,即有相等的串,求最大的 k
			   max=k;
			/////////////	
		}
		//当j=0时候 nextval[j] = -1;  当k不存在时候nextval[j]=0; k存在就nextval[j]=MAX(k);
		nextval[j]=max;
	}
   
    puts(ptrn);
	for (i=0;i<=7;i++)//串从0地址开始存
	{printf("%d ",nextval[i]);
	}

}

你可能感兴趣的:(模式匹配)