当前位置: 首页 > news >正文

【LeetCode】516. 最长回文子序列

文章目录

  • 1. 思路讲解
    • 1.1 创建dp表
    • 1.2 状态转移方程
    • 1.3 不需考虑边界问题
  • 2. 整体代码

1. 思路讲解

1.1 创建dp表

此题采用动态规划的方法,创建一个二维dp表,dp[i][j]表示s[i, j]中最大回文子序列的长度。且我们人为规定 i 是一定小于等于 j 的。

1.2 状态转移方程

在求dp[i][j]时,首先要判断s[i]和s[j]是否相同。

如果 s[i] == s[j]

  1. 如果 i == j,说明 i 与 j 的位置相同,此时dp[i][j] 就为 1
  2. 如果 i + 1 == j,说明 i 与 j 相邻,此时dp[i][j] 就为2
  3. 其他情况下,说明 i 和 j 中间有其他元素,那么此时dp[i][j] = dp[i+1][j-1] + 2;

如果s[i] != s[j]

那么此时,说明不能同时以 i 为开头和以 j 为结尾,我们去掉这种情况寻找一个最大子序列即可。方法就是在 dp[i+1, j] 和 dp[i, j-1] 中选一个最大的即可。即dp[i][j] = max(dp[i+1[j], dp[i][j-1]);

1.3 不需考虑边界问题

在求dp[i][j]的时候,我们可能会用到 i + 1 和 j - 1,在它们有可能越界的时候,一定是 i 等于 j 的时候。我们创建的dp表是二维的,我们可以想到,在可能越界的时候,就是左上角的位置或者右下角的位置,但其实这两个位置满足 i == j,那么dp[i][j] 就会被直接赋值为1,此时就不会用到 i + 1 和 j - 1 了,所以其实我们不用考虑越界的情况。

2. 整体代码

在这里插入图片描述

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();// 创建二维dp表,dp[i][j]表示s[i, j]最大子序列的长度vector<vector<int>> dp(n, vector<int>(n));// dp[i][j]需要用到dp[i+1][j-1]// 所以i从大到小循环,j从小到大循环,且i是小于等于j的for (int j = 0; j < n; ++j){for (int i = j; i >= 0; --i){if (s[i] == s[j]){if (i == j) dp[i][j] = 1;else if (i + 1 == j) dp[i][j] = 2;else 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];}
};
http://www.lryc.cn/news/109165.html

相关文章:

  • Java 集合框架
  • 遇到多人协作,我们该用git如何应对?(版本二)
  • Flutter iOS 集成使用 fluter boost
  • node.js相关的npm包的集合
  • Android Ble蓝牙App(二)连接与发现服务
  • Android 自定义按钮(可滑动、点击)
  • mac录屏怎么打开?很简单,让我来教你!
  • Stable Diffusion AI绘画学习指南【插件安装设置】
  • APP开发中的性能优化:提升用户满意度的关键
  • Golang 切片 常用方法
  • 【Linux后端服务器开发】poll/epoll多路转接IO服务器
  • 【设计模式——学习笔记】23种设计模式——命令模式Command(原理讲解+应用场景介绍+案例介绍+Java代码实现)
  • Rust中的高吞吐量流处理
  • 探索编程世界的宝藏:程序员必掌握的20大算法
  • Android NFC通信示例
  • 2023年08月IDE流行度最新排名
  • 使用Beego和MySQL实现帖子和评论的应用,并进行接口测试(附源码和代码深度剖析)
  • 物联网潜在的巨大价值在于大数据分析
  • SSL原理详解
  • linux下的etc目录代表什么意思
  • iOS 两种方式设置状态栏
  • html5:webSocket 基础使用
  • html学习10-----总结(完)
  • Spring使用P命名空间实现注入数值信息-----Spring框架
  • windows环境下安装RabbitMQ
  • Java源码规则引擎:jvs-rules决策流的自定义权限控制
  • Python-字符串的世界
  • 使用上 Spring 的事件机制
  • Linux安装QT
  • 如何用arduino uno主板播放自己想要的曲子。《我爱你中国》单片机版本。