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<climits>
using namespace std;
int main()
{
string s;
getline(cin,s);
int len=s.length();
bool dp[len+1][len+1];
int maxVal=INT_MIN;
for(int l=1;l<=len;l++){
for(int i=1;i<=len-l+1;i++){
int j=i+l-1;
if(j-i<2){
dp[i][j]=s[i-1]==s[j-1];
}else{
dp[i][j]=(dp[i+1][j-1]&&s[i-1]==s[j-1]);
}
if(dp[i][j]){
// cout<<i<<" "<<j<<endl;
maxVal=max(maxVal,j-i+1);
}
}
}
cout<<maxVal<<endl;
return 0;
}