对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:Is PAT&TAP symmetric?输出样例:
11
求回文串,以i为位置遍历字符串,中心展开j个长度,即判断i-j与i+j是否相等,长度初始为1(若回文串是偶数,判断i-j+1与i+j是否相等,长度初始为0),若相等回文串长度+2
#include<iostream>
using namespace std;
int main()
{
char a[1005];
int i,j,len,cnt,max;
gets(a);
len = strlen(a);
max = 0;
for(i=0; i<len; i++)
{
//奇
cnt = 1;
for(j=1; j<len; j++)
{
if(i+j<len&&i-j>=0&&a[i-j]==a[i+j])
{
cnt+=2;
}
else {
break; //若不相等此位置i作废,判断下一个位置的回文串,下同
}
}
if(cnt>max) {
max = cnt;
}
//偶
cnt = 0;
for(j=1; j<len; j++)
{
if(a[i-j+1]==a[i+j]&&i+j<len&&i-j+1>=0)
{
cnt+=2;
}
else {
break;
}
}
if(cnt>max) {
max = cnt;
}
}
cout << max << endl;
return 0;
}