记录编号 94479 评测结果 WWWWWWWWWW
题目名称 [Citric S2] 柠檬的密码 最终得分 0
用户昵称 Gravatar紫葉 是否通过 未通过
代码语言 C 运行时间 0.006 s
提交时间 2014-04-01 12:21:32 内存使用 0.35 MiB
显示代码纯文本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char str[100000];
char s1[10];
int main(int argc, char *argv[]) {
	
	int n,x;// 1=<x<=n/2 
	int i,j,t,k,max=0,sum,len;
	int tot;
	freopen("password.in ","r",stdin);
	freopen("password.out","w",stdout);
	
	scanf("%d",&n);
	scanf("%s",str);
//    gets(s1);
//    gets(str);
//	printf("n=%d  %s",n,str);
	for(i=0;i<=n-3;i++) //以i为断点搜索left回文串 
	{
		tot=0;
		sum=0;
	    t=i;
	    k=n-1;
	    while(str[t]!=str[k]&&k>=t+2) k--;//找到最右一个与当前i位置相同的点 
	//    if(k>=t+2) tot++;
	    while(str[t]==str[k]&&k>=t+2)//搜索比较,记录left,right回文串的长度 
	    {
	    	t++;
	    	k--;
	    	tot++;
	    }
	    sum=sum+tot*2;  //保留左右两端回文串的长度 
   //     printf("sum=%d\n",sum);
		tot=0;
	    for(j=t;j<=k;j++) //搜索以j为中心的回文串mid 
	    {
	    	len=0;
	    	for(x=1;j-x>=t&&j+x<=k;)//x表示mid回文串的半长 
	    	{
	    		if(str[j-x]==str[j+x]) x++; 
	    		else
	    		break;
	    	}
	    	len=(x-1)*2+1;
	    	if(len>tot) tot=len;//保留最长的mid回文串的长度 
	    }
	    sum=sum+tot;
	    if(sum>max) max=sum;//保留最长的回文密码串的长度 
	}
	
	printf("%d\n",max);
	
	return 0;
}