每周LeetCode算法题(十四)516. Longest Palindromic Subsequence

来源:互联网 发布:天天酷跑网络授权失败 编辑:程序博客网 时间:2024/06/10 20:50

每周LeetCode算法题(十四)

题目: 516. Longest Palindromic Subsequence

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”.

解法分析

本题求最大回文子序列长度。思路是,序列从中间往外扩,如果两端的字符相同就给长度加2,不相同就取两端以内(包含两端)的最大长度。令dp[i][j]表示字符串s下标i处为右端,下标j处为左端的子序列的最大长度,那么用两层循环遍历字符串,最后得到的dp[s.size() - 1][0]就是所求的最大回文子序列长度。

C++代码

class Solution {public:    int longestPalindromeSubseq(string s) {        int len = s.size();        int ** dp = new int*[len];        for (int i = 0; i < len; i++) {            dp[i] = new int[len];            memset(dp[i], 0, sizeof(int) * len);        }        for (int i = 0; i < len; i++) {            dp[i][i] = 1;            for (int j = i - 1; j >= 0; j--) {                if (s[i] == s[j]) {                    dp[i][j] = dp[i - 1][j + 1] + 2;                } else {                    dp[i][j] = max(dp[i][j + 1], dp[i - 1][j]);                }            }        }        return dp[len - 1][0];    }};
原创粉丝点击