NYOJ 308
View Code
1 /* 2 注意: 3 题非常简单,读题有误 4 不是求最长回文子串 5 而是求 原串的一个子串 ,这个子串反转后还是原串的子串 6 相当于求原串和他的反转串 的最长公共子序列(连续) 7 */ 8 9 #include<iostream> 10 #include<cstdio> 11 #include<cstdlib> 12 #include<cstring> 13 using namespace std; 14 15 char ch[60]; 16 char tc[60]; 17 18 int main() 19 { 20 int i,j,k,ti,tj,iscase,len,max,m,n; 21 scanf("%d",&iscase); 22 while(iscase--) 23 { 24 scanf("%s",tc); 25 26 len=strlen(tc); 27 for(i=0,j=0;i<len;++i) 28 if(tc[i]!=' ')ch[j++]=tc[i]; 29 ch[j]='\0'; 30 len=strlen(ch); 31 32 for(i=0;i<len;++i) 33 tc[i]=ch[len-i-1]; 34 tc[len]='\0'; 35 ti=tj=0; 36 max=1; 37 38 for(i=0;i<len;++i) 39 for(j=0;j<len;++j) 40 { 41 for(m=i,n=j;m<len&&n<len&&ch[m]==tc[n];m++,n++); 42 if(m-i>max) 43 { 44 max=m-i; 45 ti=i; 46 tj=m-1; 47 } 48 } 49 50 for(i=ti;i<=tj;++i) 51 printf("%c",ch[i]); 52 printf("\n"); 53 } 54 return 0; 55 }