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 <cstring>
#include <cstdlib>
using namespace std;
int dp[1001][1001];
int main()
{
memset(dp, 0, sizeof(dp));
string str;
getline(cin, str);
int len = str.size(), ans = 1;
for (int i = 0; i < len; i++)
{
dp[i][i] = 1;
if (i < len - 1)
{
if (str[i] == str[i + 1])
{
dp[i][i + 1] = 1;
ans = 2;
}
}
}
for (int l = 3; l <= len; l++)
{
for (int i = 0; i + l - 1 < len; i++)
{
int j = i + l - 1;
if (str[i] == str[j] && dp[i + 1][j - 1] == 1)
{
dp[i][j] = 1;
ans = l;
}
}
}
cout << ans << endl;
system("pause");
return 0;
}