对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定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
25
#include <iostream>

using namespace std;

int main() {
string s;
getline(cin, s);
int mlen = 0, clen = 0;

for (int i = 0; s[i] != '\0'; i++) {
for (int j = s.length() - 1; j >= i; j--) {
int flag = 1;
if (s[i] == s[j]) //遇到相同得,截取字串,做对称比较
{
string s2 = s.substr(i, j + 1 - i);
for (int x = 0; x < s2.length(); x++) //对称比较
if (s2[x] != s2[s2.length() - 1 - x]) flag = 0;
if (flag) clen = s2.length();
if (mlen < clen) mlen = clen;
}
}
}
cout << mlen;
return 0;
}