1. 题目
给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。
示例 1:
输入:
"bbbab"
输出:
4
一个可能的最长回文子序列为 "bbbb"。示例 2:
输入:
"cbbd"
输出:
2
一个可能的最长回文子序列为 "bb"。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:
LeetCode 5. 最长回文子串(动态规划)
LeetCode 647. 回文子串(DP)
LeetCode 1216. 验证回文字符串 III(DP)
LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)
LeetCode 5688. 由子序列构造的最长回文串的长度(最长回文子序)
注意,子序列,可以隔着字符
class Solution {
public:int longestPalindromeSubseq(string s) {int i, j, n = s.size();vector<vector<int>> dp(n,vector<int>(n,0));for(i = 0; i < n; ++i)dp[i][i] = 1;for(j = 0; j < n; ++j){for(i = j-1; i >= 0; --i)//区间从小往大,所以逆序{if(s[i] == s[j])dp[i][j] = dp[i+1][j-1]+2;elsedp[i][j] = max(dp[i+1][j], dp[i][j-1]);}}return dp[0][n-1];}
};
176 ms 67.1 MB