题解 | 最长回文子序列
最长回文子序列
https://www.nowcoder.com/practice/82297b13eebe4a0981dbfa53dfb181fa
#include <bits/stdc++.h> using namespace std; const int MAXN = 1000 + 10; int dp[MAXN][MAXN]; string str; int n; int main() { cin >> str; n = str.length(); //典中典区间dp for(int i = 0; i < n; i++)dp[i][i] = 1;//初始化单个字符 for(int len = 2; len <= n; len++)//回文字符两个起步 { for(int i = 0; i < n - len + 1; i++)//起点 { int j = i + len - 1;//终点 if(str[i] == str[j]) dp[i][j] = dp[i + 1][j - 1] + 2;//相同则加2 else dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);//不同则取较大值 } } cout << dp[0][n - 1] << endl; return 0; }