LeetCode:516.最长回文子序列

embedded/2025/2/6 4:12:54/

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:516.最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
输入:s = “bbbab”
输出:4
解释:一个可能的最长回文子序列为 “bbbb” 。
示例 2:
输入:s = “cbbd”
输出:2
解释:一个可能的最长回文子序列为 “bb” 。

  • 类似上一题
  • dp[i][j]表示字符串s[i, j]范围内最长的回文子序列的长度为dp[i][j]
  • 初始化:和上一题一样,在s.charAt(i) == s.charAt(j)相等时分开考虑:i, j重合,相差1,相差大于1,则不需要初始化
  • 递推公式:当i, j 相等时:如果i,j重合则dp[i][j] = 1;如果i,j相差1dp[i][j] = 2;如果i,j相差大于1dp[i][j] = dp[i + 1][j - 1] + 2;当i, j 不相等时:dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j])
  • 遍历顺序:外层for循环倒序,内存for循环正序
java">	public int longestPalindromeSubseq(String s) {int[][] dp = new int[s.length()][s.length()];for (int i = s.length() - 1; i >= 0; i--) {for (int j = i; j < s.length(); j++) {if (s.charAt(i) == s.charAt(j)) {if (j - i == 0) {dp[i][j] = 1;} else if (j - i == 1) {dp[i][j] = 2;} else {dp[i][j] = dp[i + 1][j - 1] + 2;}} else {dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]);}}}return dp[0][s.length() - 1];}

另一种写法,i, j相等时不分开考虑重合,相差1,或者大于1

java">	public int longestPalindromeSubseq(String s) {int len = s.length();int[][] dp = new int[len + 1][len + 1];for (int i = len - 1; i >= 0; i--) {dp[i][i] = 1; // 初始化for (int j = i + 1; j < len; j++) {if (s.charAt(i) == s.charAt(j)) {dp[i][j] = dp[i + 1][j - 1] + 2;} else {dp[i][j] = Math.max(dp[i + 1][j], Math.max(dp[i][j], dp[i][j - 1]));}}}return dp[0][len - 1];}

http://www.ppmy.cn/embedded/159924.html

相关文章

深度学习之“缺失数据处理”

缺失值检测 缺失数据就是我们没有的数据。如果数据集是由向量表示的特征组成&#xff0c;那么缺失值可能表现为某些样本的一个或多个特征因为某些原因而没有测量的值。通常情况下&#xff0c;缺失值由特殊的编码方式。如果正常值都是正数&#xff0c;那么缺失值可能被标记为-1…

Linux ifstat 命令使用详解

简介 Linux 中的 ifstat 命令用于显示网络接口统计信息&#xff0c;显示系统中每个网络接口的网络流量信息&#xff08;如发送和接收的字节数或包数&#xff09;。它提供了一种实时监视网络接口活动的方法&#xff0c;帮助系统管理员和用户诊断与网络相关的问题。 安装 Debi…

文章分类列表查询功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 目录 总说 一、功能实现 1.1 Controller层 1.2 Service层 1.3 Impl层 1.4 Mapper层 1.5 测试接口 一、功能实现 参数要求 …

Vue.js 如何选择合适的组件库

Vue.js 如何选择合适的组件库 大家在开发 Vue.js 项目的时候&#xff0c;都会面临一个问题&#xff1a;我该选择哪个组件库&#xff1f; 市面上有很多优秀的 Vue 组件库&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它们各有特点。选择合适的组件库&#xf…

用 HTML、CSS 和 JavaScript 实现抽奖转盘效果

顺序抽奖 前言 这段代码实现了一个简单的抽奖转盘效果。页面上有一个九宫格布局的抽奖区域&#xff0c;周围八个格子分别放置了不同的奖品名称&#xff0c;中间是一个 “开始抽奖” 的按钮。点击按钮后&#xff0c;抽奖区域的格子会快速滚动&#xff0c;颜色不断变化&#xf…

2024-我的学习成长之路

因为热爱&#xff0c;无畏山海

sslscan:快速 SSL/TLS 扫描器!全参数详细教程!Kali Linux教程!黑客渗透教程!

简介 sslscan 查询 SSL/TLS 服务&#xff08;如 HTTPS&#xff09;并报告协议版本、密码套件、密钥交换、签名算法和正在使用的证书。这有助于用户从安全角度了解哪些参数较弱。 SSLSCAN还可以将结果输出到XML文件中&#xff0c;以便于外部程序。 安装 源码安装 通过以下…

[NOIP1997 普及组] 棋盘问题

题目背景 NOIP1997 普及组第一题 题目描述 设有一个 NM 方格的棋盘 (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正方形、多少个长方形&#xff08;不包括正方形&#xff09;。 例如&#xff1a;当 N2,M3 时&#xff1a; 正方形的个数有 8 个&#xff1a;即边长为 1 的…