1. 程式人生 > >kmp演算法得到數列的next值

kmp演算法得到數列的next值

#include <iostream>
#include<string>
using namespace std;

void GetNext(int T[], int next[]) //求模式T的next值
{
	int i,j,len;
	next[0] = -1;
	for (j=1;T[j]!='\0';len--)         //依次求next[j]
	{
		for (len=j-1; len>=1; len--)//相等字串的最大長度為j-1
		{
			for (i=0; i<len; i++)   //依次比較T[0]~T[len-1]與T[j-len]~T[j-1]
				if (T[i] !=T[j-len+i]) break;
			if (i==len)
			{
				next[j]=len;break;
				cout<<next[j];
			}
		}
		if (len<1) next[j] = 0;     //其他情況,無相等子串
		
	}
	
}
void main()
{
	int a[15] = {0, 1, 2, 3, 4, 0, 2, 3, 4, 1, 2, 3, 4, 4, 5};
	int next[80];
	GetNext(a, next);
	cout<<next[0];
	system("pause");
}