PAT L2-008. 最长对称子串
L2-008. 最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
解题思路:
找定一个中间字符,然后往两边字符扩散,相等则对称。这里要注意最长对称字串是偶数的情况
代码如下:
#include<iostream> #include<cstring> using namespace std; int main(){ char a[1005]; gets(a); int max=1,len=strlen(a);//最短对称字串是1 即一个字符 for(int i=1;i<len;i++){//最长对称字串是单数 int num=1; for(int j=i-1,k=i+1;j>=0&&k<len;j--,k++,num+=2){ if(a[j]!=a[k])break; } if(num>max)max=num; } for(int i=0;i<len;i++){//最长对称字串是偶数 int num=0; for(int j=i,k=i+1;j>=0&&k<len;j--,k++,num+=2){ if(a[j]!=a[k])break; } if(num>max)max=num; } cout<<max<<"\n"; return 0; }