中M2018春C入門和進階練習集-程式設計題64 7-64 最長對稱子串(25 分)
阿新 • • 發佈:2019-02-15
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; }