5-7 最长对称子串 (25分) 对给定的字符串,
本题要求你输出最长对称子串的长度。
例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
对每一位字符串检查是否为对称轴(奇数)
或者对称中心左边的第一个字符(偶数)
///21
#include <iostream>
#include <cstdio>
using namespace std;
int maxn=0,len;
string s;
void zhongjian(int n);
void bianbian(int n);
int main(){
getline(cin,s);
len=s.length();
for(int i=0;i<len;i++){
zhongjian(i);
bianbian(i);
}
cout<<maxn;
return 0;
}
void zhongjian(int tmp){
int len_zhongjian=1;
//tmp=0(假设对称点在下标0)没有操作
for(int i=1;tmp-i>=0&&tmp+i<=len-1;i++){
if(s[tmp-i]==s[tmp+i]){
len_zhongjian+=2;
}else{
break;
}
}
if(len_zhongjian>maxn)maxn=len_zhongjian;
}
void bianbian(int tmp){
int len_bianbian=0;
for(int i=0;tmp-i>=0&tmp+i+1<=len-1;i++){
if(s[tmp-i]==s[tmp+i+1]){
len_bianbian+=2;
}else{
break;
}
}if(len_bianbian>maxn)len_bianbian=maxn;
}
//Is PAT&TAP symmetric?
//s PAT&TAP s
//11
#include <iostream>
#include <cstdio>
using namespace std;
void zhongjian(int t);
void bianbian(int t);
int n,maxn=0;
string str;
int main()
{
getline(cin,str);//Is PAT&TAP symmetric?
n = str.length();//如果对称//21
for(int i=0;i<n;i++){
zhongjian(i);
bianbian(i);
}
printf("%d",maxn);
return 0;
}
void zhongjian(int t){
int i,j=1;
for(int i=1;t-i>-1&&t+i<n+1;i++){
if(str[t-i]==str[t+i]){
j+=2;
}
else break;
}
if(j>maxn)maxn=j;
}
void bianbian(int t){
int i,j1=0,j2=0;
for(i=0;t-i-1>-1&&t+i+1<n+1;i++){
if(str[t-i-1]==str[t+i]){
j1=j1+2;
}else break;
}
if(maxn<j1)maxn=j1;
//if(maxn<j2)maxn=j2;
}