int longest_palindrome(char c[]){
	int p,ii,m=strlen(c);
	for(int i=0;i<m;i++){
		s[i*2]='@';
		s[i*2+1]=c[i];
	}
	s[m*2]='@';m=m*2+1;
	pal[0]=0;p=R=0;
	//p=max_idx{pal[i]+i},R=max{pal[i]+i}
	for(int i=1;i<m;i++){
		ii=p-(i-p); //reflextion point
		int n=R-i;  //distance of i and pal[p]+p 
		if(i>R){ //overflow R
			pal[i]=match(i-1,i+1,m);
			R=i+pal[p=i];
		}
		else if(pal[ii]==n){ //exactly at n
			pal[i]=n+match(i-n-1,i+n+1,m);
			R=i+pal[p=i];
		}
		else pal[i]=min(pal[ii],n);
	}
	int ans=0;
	for(int i=0;i<m;i++)
		maz(ans,pal[i]);
	return ans;
}
Beispiel #2
0
int main()
{
  Mazmorra maz(23, 80);
  maz.bucleJuego();
}