POJ 2752

关于MP(非KMP)算法中出现的mpnext数组的应用

#include 
#include 
#include 
#include 
using namespace std;

const int maxs= 4e5+3;

char s[maxs];
int nxt[maxs];
int ans[maxs];

void PreKmp(int l)
{
	int i= 0, j;
	j= nxt[0]= -1;

	while (i< l){
		while (j> -1 && s[i]!= s[j]){
			j= nxt[j];
		}
		nxt[++i]= ++j;
	}
}

int main()
{
	while (EOF!= scanf(" %s", s)){
		int ls= strlen(s);
		PreKmp(ls);
		int la= 0, j= ls;

		while (j> 0){
			ans[la++]= j;
			j= nxt[j];
		}
		while (la--){
			printf("%d ", ans[la]);
		}
		putchar('\n');
	}
	return 0;
}

你可能感兴趣的:(POJ 2752)