5-12 最长对称子串 (25分)

来源:互联网 发布:海岛奇兵20级野人数据 编辑:程序博客网 时间:2024/04/29 09:34

5-12 最长对称子串 (25分)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:

输入在一行中给出长度不超过1000的非空字符串。
输出格式:

在一行中输出最长对称子串的长度。
输入样例:

Is PAT&TAP symmetric?
输出样例:

11

分析:
考虑两种情况,第一种类似abccba
第二种类似abcba

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;int maxlen1[1003];//maxlenl[t]用于存储以str[t]为中心点的对称字符串的长度int maxlen2[1003];char str1[1003];int main(){    int length1=0,index,sum;    int max1,max2;    char c;   while(scanf("%c",&c)&&c!='\n')   {       str1[length1++]=c;   }    for (int i=0;i<length1;i++)    {        index=i+1;        sum=0;          for (int j=i;j>=0;j-- )          {              if (str1[j]==str1[index++])//              {                  sum++;              }              else              {                  break;              }          }          maxlen1[i]=sum;          max1=*max_element(maxlen1,maxlen1+length1);    }     for (int i=0;i<length1;i++)    {        index=i;        sum=0;          for (int j=i;j>=0;j-- )          {              if (str1[j]==str1[index++])              {                  sum++;              }              else              {                  break;              }          }          maxlen2[i]=sum;          max2=*max_element(maxlen2,maxlen2+length1);    }       if(max1>=max2)        cout<<max1*2;       else        cout<<max2*2-1;    return 0;}
0 0