• NYOJ132 最长回文子串


     

    最长回文子串

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
     
    描述
    输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首尾不要输出多余的字符串)。输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组)。
     
    输入
    输入一个测试数据n(1<=n<=10);
    随后有n行,每行有一个字符串。
    输出
    输出所要求的回文子串。
    样例输入
    1
    Confuciuss say:Madam,I'm Adam.
    样例输出
    Madam,I'm Adam
    
     1 /* 功能Function Description:     NYOJ-132  最长回文子串
     2    开发环境Environment:          DEV C++ 4.9.9.1
     3    技术特点Technique:
     4    版本Version:
     5    作者Author:                    可笑痴狂
     6    日期Date:                      20120730
     7    备注Notes:                    注意题目要求是忽略大小写和标点符号的,所以要事先做预处理
     8 */
     9 #include<stdio.h>
    10 #include<string.h>
    11 #include<ctype.h>   
    12 #define MAX 5010
    13 
    14 int main()
    15 {
    16     int t,i,j,st,len,end,k,max;
    17     int pos[MAX];
    18     char s[MAX],s1[MAX];
    19 
    20     scanf("%d",&t);
    21     getchar();
    22     while(t--)
    23     {
    24         gets(s);
    25         len=strlen(s);
    26         k=st=max=end=0;        
    27         for(i=0;i<len;++i)          //预处理
    28         {
    29             if(isalpha(s[i]))       //判断是不是字母 包含在头文件ctype.h中
    30             {
    31                 pos[k]=i;           //存数位置
    32                 if(s[i]<97)         //把大写转化为小写字母
    33                     s1[k++]=s[i]+32;
    34                 else
    35                     s1[k++]=s[i];
    36             }
    37         }
    38             //    puts(s1);
    39             //    for(i=0;i<k;++i)
    40             //        cout<<pos[i];
    41             //    cout<<endl;
    42         for(i=0;i<k;++i)
    43         {    
    44             for(j=0;j<=i&&i+j<k;++j)        //回文字符数位奇数的情况
    45             {
    46                 if(s1[i-j]!=s1[i+j])
    47                     break;
    48                 if(j*2+1>max)
    49                 {
    50                     max=2*j+1;
    51                     st=pos[i-j];
    52                     end=pos[i+j];
    53                 }
    54             }
    55             for(j=0;j<=i&&i+j+1<k;++j)     //回文字符数为偶数的情况
    56             {
    57                 if(s1[i-j]!=s1[i+j+1])
    58                     break;
    59                 if(j*2+2>max)
    60                 {
    61                     max=2*j+2;         
    62                     st=pos[i-j];
    63                     end=pos[i+j+1];
    64                 }
    65             }
    66         }
    67         for(i=st;i<=end;++i)
    68             printf("%c",s[i]);
    69         printf("\n");
    70     }
    71     return 0;
    72 }
    功不成,身已退
  • 相关阅读:
    Python的Flask框架开发RESTful API
    自研接口测试平台(Django2+Bootstrap3+Unittest)
    接口自动化测试平台 http://120.79.232.23
    ​性能优化指南:性能优化的一般性原则与方法
    性能优化指南:性能优化的一般性原则与方法
    ​性能优化指南:性能优化的一般性原则与方法
    开源自动化测试平台介绍一览
    开源自动化测试平台介绍一览
    App自动化测试方案
    SQL Server中取两个表的交集,并集和差集
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2615564.html
Copyright © 2020-2023  润新知