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
solution:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin,s);
int n=s.size();
int maxsize=0;
for(int i=0;i<2*n-1;i++)
{
int l=i/2;
int r=i/2+i%2;
while(l>=0 && r<n && s[l]==s[r])
{
int size=r-l+1;
l--,r++;
maxsize=max(maxsize,size);
}
}
cout<<maxsize;
}
中心拓展算法,比如存在012三个元素,那么定义两个指针l,r
第一轮:l->0,r->0
第二轮:l->0,r->1
第三轮:l->1,r->1
第四轮:l->1,r->2
第五轮:l->2,r->2
然后分别对于每个l,r指针向外拓展比较是否相同,相同则增加maxsize值。