1. 程式人生 > >中M2018春C入門和進階練習集-程式設計題64 7-64 最長對稱子串(25 分)

中M2018春C入門和進階練習集-程式設計題64 7-64 最長對稱子串(25 分)

7-64 最長對稱子串(25 分)

對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。

輸入格式:

輸入在一行中給出長度不超過1000的非空字串。

輸出格式:

在一行中輸出最長對稱子串的長度。

輸入樣例:

Is PAT&TAP symmetric?

輸出樣例:

11
/*#include<stdio.h>
#include<string.h>

int main(void)
{
  char a[1001];
  gets(a);
  int k,i,j,max=1,n,m,cont;
  k=strlen(a);
  
  for(i=0;i<k-1;i++)
  {
    for(j=k-1;j>=i;j--)
    { if(a[i]==a[j]&&j-i>0)
      { 
        if(j%2!=i%2) //==偶數列  0 1 2 3
        { 
          n=(j-i)/2;
          if(n==0) max = ((n+1)*2 > max) ? (n+1)*2 : max;
          for(m=1;m<=n;m++)
          { if(a[i+m]!=a[j-m]) break;
            else max = (j-i+1 > max) ? j-i+1 : max;
            //printf("%d %d %d %d\n",j,i,n,m);
          }
        }
        if(j%2==i%2) //--奇數列   0 1 2 3 4
        {
          n=(j-i)/2;
          for(m=1;m<=n;m++)
          { if(a[i+m]!=a[j-m]) break;
            else max = (m*2+1 > max) ? m*2+1 : max;
          }
        }        
        
      }
      
    }
    
  }
  printf("%d",max);
  return 0;
}*/
#include<stdio.h>
#include<string.h>
int main (){
	char a[1002];
	gets(a);
	int len;
	len=strlen(a);
	int i;int x;int y;
	int max=1;int ans;
	
	for(i=1;i<len-1;i++){
		x=i-1;y=i+1;
		ans=1;
		while(a[x]==a[y]&&x>=0&&y<=len){
			x-=1;
			y+=1;
			ans+=2;
		}
		if(ans>max)
		max=ans;
		
	}
	for(i=0;i<len-1;i++){
		x=i;y=i+1;
		ans=0;
		while(a[x]==a[y]&&x>=0&&y<=len){
			x-=1;
			y+=1;
			ans+=2;
			
		}if(ans>max)
		max=ans;
	}
	printf("%d",max);
	
	return 0;
}