题目:
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11思路:这道题是一道动态规划题,由于数据较小,所以用暴力搜索就可以完成。
代码:
#include <iostream>
#include<cstring>
using namespace std;
/*Is PAT&TAP symmetric?*/
int main(){
char s[1010];
int maxn = 1;
gets(s);
for(int i=0;i<strlen(s);i++){
int count = 1,k = i;//定义一个计数变量count,和判断变量k;
for(int j=strlen(s)-1;j>i;j--){
if(s[k] == s[j]){
if(k + 1 == j){//eg:BAB
if(maxn <= count*2) maxn = count*2;
break;
}
if(k == j){//eg:BAAB
if(maxn <= count*2-1) maxn = count*2-1;
break;
}
if(s[k+1] == s[j-1]){
count ++;
k++;
}else{
count = 1;
}
}
}
}
printf("%d\n", maxn);
return 0;
}