Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, hence you must output 11.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int main(){
string str;
getline(cin, str);
int max = 1;
for(int i = 0; i < str.length(); i++){
//j用于记录从中轴往两边延伸的长度(不包含中轴)
int j = 1;
//计算以第i个元素为中轴的回文串长度(奇数长度)
for(; i - j > -1 && i + j < str.length();){
if(str[i - j] == str[i + j])
j++;
else
break;
}
if((j - 1) * 2 + 1 > max)
max = (j - 1) * 2 + 1;
j = 1;
//计算以第i个元素为中轴的左边一个元素的回文串长度(偶数长度,中轴为中间的两个数)
if(i + 1 < str.length() && str[i] == str[i + 1]){
for(; i - j > -1 && i + j + 1 < str.length();){
if(str[i - j] == str[i + j + 1])
j++;
else
break;
}
if((j - 1) * 2 + 2 > max)
max = (j - 1) * 2 + 2;
}
}
printf("%d\n", max);
return 0;
}