河北大学程序设计训练营

[TOC]

day21 最长对称子串

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

1
Is PAT&TAP symmetric?

输出样例:

1
11

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<bits/stdc++.h>
using namespace std;

int main()
{
string str;
getline(cin,str);
int maxLen=0;
for(int i=0; i<str.size(); i++)//遍历每一点,以每一点为中心,向左右查看是否相等
{
int j=1;
while(i-j>=0&&i+j<str.size()&&str[i-j]==str[i+j])//长度为奇数处理,在范围内左右相等,j增加
j++;
if(j*2-1>maxLen)//因为不符合条件才退出,这里j要减1在加上中间位置1
maxLen=2*j-1;
j=0;//长度为偶数,从从0开始
while(i-j>=0&&i+1+j<str.size()&&str[i-j]==str[i+1+j])
j++;
if(2*j>maxLen)//2*j==2*(j-1)+2
maxLen=2*j;
}
printf("%d",maxLen);
return 0;
}