题目:
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<cstdio>
#include<cstring>
const int maxn=1010;
char S[maxn];
int main(){
gets(S);
int len=strlen(S),ans=1;
int n=len*2+1;
char *N=new char[n]();
for(int i=0;i<len;i++){
N[2*i+1]=S[i];
N[2*i]='*';
}
N[n-1]='*';
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i-j>=0&&i+j<n&&N[i-j]==N[i+j]){
if(j>ans)ans=j;
}else{
break;
}
}
}
printf("%d\n",ans);
delete N;
return 0;
}