L2-008. 最长对称子串
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
题目链接
当子字符串为偶数时,指的是i+1右边j个字符加上i左边j个字符。 当字符串为奇数时,指的是i左边j个字符加上i右边j个字符加第i个字符。 所以对称子字符串必须满足 偶数 i+1-j>0 i+j<len str[i-j+1]==str[i+j] 奇数 i-j>0 i+j<len str[i-j]==str[i+j] 当不满足时说明此时的i不适合 跳过
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> using namespace std; int main() { char str[1010]; gets(str); int maxn=0,t; int len=strlen(str); for(int i=0;i<len;i++) { t=1; //奇数时 for(int j=1;j<=len;j++) { if(i-j<0||i+j>=len||str[i-j]!=str[i+j]) break; //不满足,跳过 t+=2; } maxn=max(maxn,t); t=0;//偶数时 for(int j=1;j<=len;j++) { if(i+1-j<0||i+j>=len||str[i-j+1]!=str[i+j]) break; t+=2; } maxn=max(maxn,t); } cout<<maxn<<endl; return 0; }