对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例: Is PAT&TAP symmetric? 输出样例: 11 日常优化问题,估计再比赛的时候如果开始的时候没想到,没时间去想优化了 事实证明打脸了 没比赛的情况下依然没想出来 思路参考博客:http://blog.csdn.net/liuchuo/article/details/52138898?locationNum=3&fps=1 分为两种情况 奇数串和偶数串 i表示下标 j表示长度 #include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { string s; getline(cin,s); int maxn = -1; int tmp; int len = s.size(); for(int i = 0;i < len;i ++) { //当串是奇数时 tmp = 1; for(int j = 1;j < len;j ++) { if(i - j < 0 || i + j >= len || s[i - j] != s[i + j]) break; tmp += 2; } maxn = maxn > tmp ? maxn : tmp; tmp = 0; //串是偶数时 for(int j = 1;j < len;j ++) { if(i - j + 1 < 0 || i + j >= len || s[i - j + 1] != s[i + j]) break; tmp += 2; } maxn = maxn > tmp ? maxn : tmp; } cout << maxn; return 0; }