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.
Sample Input:Is PAT&TAP symmetric?Sample Output:
11
分析:
(1) 本题用的是逐点判断,一开始会担心超时什么的,据说有线性时间的,但是需要观察规律。
(2)判断是否对称时要判断是否ABA也要判断是否ABBA;
while (low>=0&&high<len&&s[low]==s[high]){
max1+=2; //+2容易习惯写成+1
low--;
high++;
}
#include <string>
#include <iostream>
using namespace std;
int check (string s,int i){
int len=s.length();
int low=i-1,high=i+1,max1=1,max2=0;
while (low>=0&&high<len&&s[low]==s[high]){
max1+=2;
low--;
high++;
}
low=i;high=i+1;
while (low>=0&&high<len&&s[low]==s[high]){
max2+=2;
low--;
high++;
}
return max1>max2?max1:max2;
}
int main (){
string s;
getline(cin,s);
int i,max=1;
for (i=0;i<s.length();i++){
int tempMax=check(s,i);
if (max<tempMax){
max=tempMax;
}
}
cout<<max;
return 0;
}