//https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title= #include <iostream> #include <algorithm> #include <string.h> using namespace std; int main() { string s1; while(cin >> s1){ int size = s1.size(); int maxn = 0; int tem = 0; int dp[size][size]; memset(dp, 0, sizeof(dp)); string s2 = s1; reverse(s2.begin(), s2.end()); for(int i = 0;i<size;i++) for(int j = 0;j<size;j++){ if(s2[i]==s1[j]){ if(i==0||j==0) dp[i][j] = 1; else dp[i][j] = dp[i-1][j-1]+1; if((i+j+2==size)||(i+j+1==size)){ if(i+j+2==size) tem = dp[i][j]*2; else tem = dp[i][j]*2-1; maxn = max(maxn, tem); } } } cout << maxn; } }