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
分析:插入特殊字符。然后以每个字符为中心,两边扩散开来查找。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
string str;
getline(cin,str);
vector<int> vec;
int i,j;
for(i=0; i<str.size(); i++){
vec.push_back(-1);
vec.push_back(str[i]);
}
vec.push_back(-1);
int left, right, step, max;
step = 0;
max = 0;
for(i=1; i<vec.size(); i++){
step = 0;
for(left=i-1,right=i+1; left>=0&&right<vec.size(); --left,++right){
if(vec[left] != vec[right]){
break;
}
step += 2;
}
if(step > max){
max = step;
}
}
cout<<max/2<<endl;
return 0;
}