最长回文子序列(LeetCode-516)

简介: 最长回文子序列(LeetCode-516)

最长回文子序列(LeetCode-516)


题目

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。


子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。


示例 1:

输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。


示例 2:

输入:s = "cbbd"
输出:2
解释:一个可能的最长回文子序列为 "bb" 。


提示:


1 <= s.length <= 1000

s 仅由小写英文字母组成


思路

五部曲


dp[i][j] 含义


在区间范围为 [ i , j ]  (注意左右都是闭区间)内的最长的回文子序列的长度

递推公式


当 s [ i ] ≠ s [ j ]时,只说明二者不能同时加入回文子串,可以分别加入求最大值,d p [ i ] [ j ] = m a x ( d p [ i + 1 ] [ j ] , d p [ i ] [ j − 1 ] )

当 s [ i ] = s [ j ] 时,d p [ i ] [ j ] = d p [ i + 1 ] [ j − 1 ] + 2


数组初始化


当下标 i = j  时,即一个字符的回文子序列长度应该为一

遍历顺序

要注意看当前元素依靠谁的状态获取,看到递推公式,就知道肯定对于 i 的遍历肯定要倒序。


代码展示

class Solution
{
public:
    int longestPalindromeSubseq(string s)
    {
        int n = s.size();
        if (n == 1)
        {
            return 1;
        }
        vector<vector<int>> dp(n, vector<int>(n));
        for (int i = n - 2; i >= 0; i--)
        {
            dp[i][i] = 1;
            for (int j = i + 1; j < n; j++)
            {
                if (s[i] == s[j])
                {
                    dp[i][j] = dp[i + 1][j - 1] + 2;
                }
                else
                {
                    dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
                }
            }
        }
        return dp[0][n - 1];
    }
};
目录
相关文章
|
C语言
C语言经典题目(四)
C语言经典题目(四)
C语言经典题目(四)
斐波那契数(LeetCode-509)
斐波那契数(LeetCode-509)
189 0
|
算法 测试技术 ice
买卖股票的最优时机(LeetCode-121)
买卖股票的最优时机(LeetCode-121)
251 0
买卖股票的最优时机(LeetCode-121)
150.逆波兰表达式求值
150.逆波兰表达式求值
185 0
打家劫舍Ⅱ(LeetCode-213)
打家劫舍Ⅱ(LeetCode-213)
228 0
|
24天前
|
人工智能 并行计算 物联网
2026年Stable Diffusion下载+安装+使用教程(超详细版本)收藏这一篇就够了!
本文详解Windows平台Stable Diffusion秋葉整合包(v4.11.1)的本地安装与使用,含Cuda/AMD HIP双支持、ControlNet及LoRA模型配置,无需Python基础,仅需100–200GB空间,新手也能快速上手AI绘画。
|
机器学习/深度学习 人工智能 自然语言处理
重磅!花书《深度学习》,这份精炼笔记可能是最全面的
重磅!花书《深度学习》,这份精炼笔记可能是最全面的
4269 0
重磅!花书《深度学习》,这份精炼笔记可能是最全面的
★色盲悖论正解!
假设:有一个人,他有一种奇怪的色盲症。他看到的两种颜色和别人不一样,他把蓝色看成绿色,把绿色看成蓝色。   但是他自己并不知道他跟别人不一样,别人看到的天空是蓝色的,他看到的是绿色的,但是他和别人的叫法都一样,都是“蓝色”;小草是绿色的,他看到的却是蓝色的,但是他把蓝色叫做“绿色”。
6357 0
|
机器人 项目管理 开发者
阿里云开发者社区博文发布操作和规则说明
在开发者社区发布博文的几点注意事项。
阿里云开发者社区博文发布操作和规则说明

热门文章

最新文章