【动态规划】Leetcode编程题解:516. Longest Palindromic Subsequence Add to List

来源:互联网 发布:无极为什么是烂片知乎 编辑:程序博客网 时间:2024/06/17 08:39

题目:Given a string s, find the longest palindromic subsequence's length in s. You may assume that the maximum length of s is 1000.

样例:

Example 1:
Input:

"bbbab"
Output:
4
One possible longest palindromic subsequence is "bbbb".

Example 2:
Input:

"cbbd"
Output:
2
One possible longest palindromic subsequence is "bb".

给定一个字符串,我们可以将它划分成这样的子问题:任意一个该字符串的子串包含的回文串的长度,那么对于这个字符串的子串,我们可以用它在原字符串中的起始位置和结束位置来表示。因此,我们可以用一个二维数组来对子问题进行表示。

解法:

class Solution {public:    int longestPalindromeSubseq(string s) {        int n = s.length(), dp[n][n];        for(int i = 0; i < n; i++)        dp[i][i] = 1;        for(int j = 1; j < n; j++) {            for(int i = j - 1; i >= 0; i--) {                if(s[j] == s[i]) {                    dp[i][j] = (i + 1 <= j - 1) ? dp[i + 1][j - 1] + 2 : 2;                }                else                   dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);            }        }        return dp[0][n - 1];    }};

阅读全文
0 0