【重点】【DP】5.最长回文子串|516.最长回文子序列

news/2024/12/5 9:42:29/

两个求解目标类似的题目,对比记忆!

5.最长回文子串

题目

法1:二维DP

最基础方法!必须掌握!
O(N^2) + O(N^2)

class Solution {public String longestPalindrome(String s) {int n = s.length();if (n == 1) {return s;}String res = s.substring(0, 1);boolean[][] dp = new boolean[n][n];for (int i = 0; i < n; ++i) {dp[i][i] = true;}for (int i = n - 1; i >= 0; --i) {for (int j = i + 1; j < n; ++j) {dp[i][j] = (j - i == 1 || dp[i + 1][j - 1]) && (s.charAt(i) == s.charAt(j));if (dp[i][j] && (j - i + 1 > res.length())) {res = s.substring(i, j + 1);} }}return res;}
}

法2:中心扩展法

O(N^2) + O(1)

class Solution {public String longestPalindrome(String s) {if (s.length() < 2) {return s;}String res = "";for (int i = 0; i < s.length(); ++i) {String res1 = palindrome(s, i, i);String res2 = palindrome(s, i, i + 1);res = res1.length() > res.length() ? res1 : res;res = res2.length() > res.length() ? res2 : res;}return res;}public String palindrome(String s, int i, int j) {while (i >= 0 && j < s.length() && (s.charAt(i) == s.charAt(j))) {--i;++j;}return s.substring(i + 1, j);}
}

516.最长回文子序列

题目

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

http://www.ppmy.cn/news/1278555.html

相关文章

DevOps系列文章 : 使用dpkg命令打deb包

创建一个打包的目录&#xff0c;类似rpmbuild&#xff0c;这里创建了目录deb_build mkdir deb_build目标 我有一个hello的二进制文件hello和源码hello.c, 准备安装到/opt/helloworld目录中 步骤 在deb_build目录创建一个文件夹用于存放我的安装文件 mkdir helloworld在he…

在Linux系统中安装MySQL数据库

目录 一、MySQL简介 二、MySQL安装步骤 1、下载MySQL的YUM仓库文件 2、安装MySQL源 3、解决密钥异常问题 4、安装MySQL服务器 5、开启MySQL服务 6、查看MySQL服务器中root用户的初始密码 7、使用初始密码登录MySQL服务器 8、修改root用户登录MySQL服务器的密码 三、…

HackTheBox - Medium - Linux - Jupiter

Jupiter Jupiter 是一台中等难度的 Linux 机器&#xff0c;它有一个使用 PostgreSQL 数据库的 Grafana 实例&#xff0c;该数据库在权限上过度扩展&#xff0c;容易受到 SQL 注入的影响&#xff0c;因此容易受到远程代码执行的影响。一旦站稳脚跟&#xff0c;就会注意到一个名…

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习&#xff08;含PYTHON工程&#xff09; LunarLander复现&#xff1a; 07、基于LunarLander登陆器的DQN强化学习案例&#xff08;含PYTHON工程&#xff09; 08、基于LunarLander登陆器的DDQN强化学习&#xff08;含PYTHON工程…

.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"Microsoft.IdentityModel.Tokens" Version"7.0.3" /><P…

java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

目录 1、检查项目中 JDK 的设置&#xff1a; 2、检查模块中 JDK 的设置&#xff1a; 3、检查Idea 中的SDK设置 4、检查 IDEA 中 JDK 的设置&#xff08;我出现的问题在这&#xff09;&#xff1a; 今天遇见了一个报错&#xff1a; 问题产生的原因是 JDK 版本太低&#xf…

在centos上安装python人脸库face_recognition

前段时间看了看python和face_recognition&#xff0c;用来识别人脸和对比人脸&#xff0c;发现在centos上安装face_recognition还是费了点小劲挖了点小坑的&#xff0c;曲曲折折东拼西凑到处查资料终于鼓捣好了&#xff0c;特记录一下&#xff1b; 在centos上安装face_recogni…

ubuntu20.04.3

1.方法1 创建账号 使用adduser创建账号&#xff0c;命令如下&#xff1a; adduser username username为要创建的账号名 置密码后&#xff0c;需要设置账户信息&#xff0c;这里可以采用默认&#xff0c;全部回车&#xff0c;最后输入Y确认即可&#xff1a; 2.方法2 创建新…