题解 | #回文字符串#
回文字符串
http://www.nowcoder.com/practice/5bfb74efcd5449e69a480550b1fef431
dp[i][j]的意义:在子串 s[i...j]
中,最长的回文子串长度。
#include <bits/stdc++.h> using namespace std; int longestPalindromeSubseq(const string& str) { int length = str.size(); vector<vector<int> > dp(length, vector<int>(length, 0)); // 初始对角值设为 1 for (int i = 0; i < length; i++) { dp[i][i] = 1; } // 只有上三角矩阵是起作用的 // 从下往上,从左往右遍历 for (int i = length - 2; i >= 0; i--) { for (int j = i + 1; j < length; j++) { // 如果 str[i] == str[j] if (str[i] == str[j]) dp[i][j] = dp[i+1][j-1] + 2; else { dp[i][j] = std::max(dp[i][j-1], dp[i+1][j]); } } } return dp[0].back(); } int main(){ // 输入字符串 string inputStr{}; cin >> inputStr; cout << longestPalindromeSubseq(inputStr); return 0; }