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 }

 

posted @ 2012-05-01 16:29  知行执行  阅读(186)  评论(0编辑  收藏  举报