对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
//这是目前我见到的较为精简的代码。 双指针算法,此题利用到两个while循环,分别是关于中间字母对称和关于相邻字母对称,所以在每次for循环下j=1,k=0。
这里我们可以自己打个草稿去模拟该过程,便于理解。
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,k,x=0;string s;
getline(cin,s);
for(i=0;i<s.size();i++){
j=1,k=0;
while(i-j>=0&&i+j<s.size()&&s[i-j]==s[i+j])j++;
if((j-1)*2+1>x)x=(j-1)*2+1;
while(i-k>=0&&i+k+1<s.size()&&s[i-k]==s[i+k+1])k++;
if(k*2>x)x=2*k;
}cout<<x;
return 0;
}