1040 Longest Symmetric String (25 分)
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<bits/stdc++.h>
using namespace std;
const int Max = 1010;
int main(){
string str;
getline(cin, str);
int dp[Max][Max];
fill(dp[0], dp[0] + Max * Max, 0);
int len = str.size(), ans = 1;
for(int i = 0; i < len; i++){
dp[i][i] = 1;
if(i + 1 < len && 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){
ans = l;
dp[i][j] = 1;
}
}
}
printf("%d", ans);
return 0;
}