这道题比较特殊,答案不是dp数组的某个值,而是记录下来的一个变量
主要思路是二维DP数组,用i、j存储两个下标,如果input[i] = input[j]&&dp[i - 1][j - 1]==1 那么 dp[i][j] = 1 ,然后初始化dp[i][i]就行了
patzjujztaccbcc
代码
#include<algorithm>#include<stdio.h>#include<cstring>#include<iostream>using namespace std;const int maxn = 1010;int dp[maxn][maxn]={0};char input[maxn];int main(){scanf("%s", input);int len = strlen(input), ans = 1;for(int i = 0; i < len; i++){dp[i][i] = 1;if(i < len - 1){if(input[i] == input[i + 1]){dp[i][i + 1] = 1;ans = 2;}}}//一定要把1和2先处理掉,从3开始for(int L = 3; L <= len; L++){//长度为1和2的都已经被处理了for(int i = 0; i + L - 1 < len; i++){int j = i + L -1;if((input[i] == input[j]) && (dp[i + 1][j - 1] == 1)){dp[i][j] = 1;ans = L;}}}printf("%d", ans);return 0;}
