Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given "Is PAT&TAP symmetric?", the longest symmetric sub-string is "s PAT&TAP s", hence you must output 11.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply PRint the maximum length in a line.
Sample Input:Is PAT&TAP symmetric?Sample Output:11#include<iostream>#include<string>#include<algorithm>using namespace std;const int maxn = 1010;bool d[maxn][maxn] = { false };int main(){ string s; getline(cin, s); int len = s.size(); int ans = 1; for (int i = 0; i < len; i++) { d[i][i] = true; if (i < len - 1) { if (s[i] == s[i + 1]) { d[i][i + 1] = true; ans = 2; } } }//边界 //状态转移方程 for (int L = 3; L <= len; L++)//枚举子串的长度 { for (int i = 0; i+L-1< len; i++)//枚举子串的起始端点,注意判断右端点的范围 { int j = i + L - 1; if (s[i] == s[j] && d[i + 1][j - 1]) { d[i][j] = true; ans = L; } } } cout << ans << endl; return 0;}
新闻热点
疑难解答