出题人 陈越
单位 浙江大学
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式
输入在一行中给出长度不超过1000的非空字符串。
输出格式
在一行中输出最长对称子串的长度。
输入样例
Is PAT&TAP symmetric?
输出样例
11
思路
借鉴大佬的代码
对称字串分奇数位和偶数位,因此我们需要两次判断
两层循环第一层:定位对称字串的中心字符
第二层:在中心字符前后逐步扩大查找范围,如果满足对称条件则长度每次+2
有帮助请点个赞
下面上代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin, s);
int l = s.length();
int max = 0;
for(int i = 0; i < l; i++){
int temp = 1;
for(int j = 1; j < l; j++){
if(i-j<0 || i+j>=l || s[i-j]!=s[i+j])
break;
temp += 2;
}
max = max < temp ? temp : max;
}
for(int i = 0; i < l; i++){
int temp = 0;
for(int j = 1; j < l; j++){
if(i-j+1<0 || i+j>=l || s[i-j+1]!=s[i+j])
break;
temp += 2;
}
max = max < temp ? temp : max;
}
cout<<max<<endl;
}