对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?
,最长对称子串为s PAT&TAP s
,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
思路
利用双指针的思想,分别从字符串的前后进行比较,每次发现相同的就截取子串,做对称比较并更新最大长度。
代码
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; }
|