当前位置:网站首页>暴力递归到动态规划 07(516. 最长回文子序列)
暴力递归到动态规划 07(516. 最长回文子序列)
2022-08-03 00:26:00 【涛涛英语学不进去】
516.最长回文子序列
给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。
示例 1:
输入: “bbbab”
输出: 4
一个可能的最长回文子序列为 “bbbb”。
示例 2:
输入:“cbbd”
输出: 2
一个可能的最长回文子序列为 “bb”。
提示:
- 1 <= s.length <= 1000
- s 只包含小写英文字母
暴力递归
左右开始比较,如果左右是同一个位置,那一定是回文序列,返回1,如果左右相邻了,如果左右相等,则返回2 ,因为两个都是回文子序列的一员;否则返回1,两个只有1个可以作为回文子序列中的一员。
其他情况:不以 L 开头,不以 R 结尾
以 L 开头,不以 R 结尾
不以 L 开头,以 R 结尾
以 L 开头,以 R 结尾 (这个要比较一下这个情况存在不存在,存在直接结果+2,两个都是结果的一员)
取四个中的最大值
public int longestPalindromeSubseq(String s) {
return process(s.toCharArray(), 0, s.length() - 1);
}
public int process(char[] s, int L, int R) {
if (L == R) {
return 1;
} else if (L + 1 == R) {
//如果只有两位 0 和 1 位
return s[L] == s[R] ? 2 : 1;
} else {
//其他情况
//以不以L开头 不以R结尾
int NLNR = process(s, L + 1, R - 1);
//以L开头,不以R结尾
int LNR = process(s, L, R - 1);
//不以L开头,以R结尾
int NLR = process(s, L + 1, R);
//以L开头,以R结尾
int LR = s[L] == s[R] ? 2 + process(s, L + 1, R - 1) : 0;
return Math.max(Math.max(NLNR, LNR), Math.max(NLR, LR));
}
}
动态规划
先把对角线和对角线上面的线处理了
对角线上自己和自己肯定是回文的,值为1
后一个如果和前一个相等,则两个都是回文的一员,返回2,否则其中一个都是回文的一员,返回1。
从下往上,从左往右计算,此时 j 至少是 i + 2 了。
public int longestPalindromeSubseq2(String s) {
int n = s.length();
char[] chars = s.toCharArray();
int[][] dp = new int[n][n];
dp[n - 1][n - 1] = 1;
for (int i = 0; i < n - 1; i++) {
//当为主对角线上元素时,一定和当前相等,即为1
dp[i][i] = 1;
//主对角线上一条线
dp[i][i + 1] = chars[i] == chars[i + 1] ? 2 : 1;
}
for (int i = n - 3; i >= 0; i--) {
for (int j = i + 2; j < n; j++) {
//其他情况
//以不以L开头 不以R结尾
int NLNR = dp[i + 1][j - 1];
//以L开头,不以R结尾
int LNR = dp[i][j - 1];
//不以L开头,以R结尾
int NLR = dp[i + 1][j];
//以L开头,以R结尾
int LR = chars[i] == chars[j] ? 2 + dp[i + 1][j - 1] : 0;
dp[i][j] = Math.max(Math.max(NLNR, LNR), Math.max(NLR, LR));
}
}
return dp[0][n - 1];
}
边栏推荐
- 几种常见的跨域解决方法
- SAP 电商云 Spartacus UI 的持续集成 - Continous integration
- 精心整理16条MySQL使用规范,减少80%问题,推荐分享给团队
- esp32和ros2基础篇草稿-micro-ros-
- 华为防火墙双机热备技术:HRP、VGMP、VRRP,三大技术值得一学!
- HVV红队 | 渗透测试思路整理
- 九零后程序员心声:互联网的同行们,别卷了,再卷人都卷没了
- 投资的思考
- DB2数据库-获取表结构异常:[jcc][t4][1065][12306][4.26.14]CharConvertionException ERRORCODE=-4220,SQLSTATE=null
- 【图像分类】2022-MPViT CVPR
猜你喜欢
风电场运营实践 | 麒麟信安助力国华投资山东公司集控中心实现安全智慧化运营
Jmeter二次开发实现rsa加密
文树勋率长沙市人大常委会主任会议成员莅临麒麟信安调研数字经济发展情况
ASP.NET网络版进销存管理系统源码【源码免费分享】
谷歌 Chrome 浏览器 104 正式版发布:加快网页加载,蓝牙 API 改进
基于rt-thread studio的STM32裸机开发——LED
如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)
npm运行项目dependencies were not found: core-js/modules/es6.array.fill
线上交流丨稀疏神经网络:实践和理论(青源Talk第23期 汪张扬)
新公链时代的跨链安全性解决方案
随机推荐
GTK实现水波纹效果
Day017 封装
matlab常微分方程在传染病建模中的应用
图文详细解决IDEA使用Debug模式启动项目一直转圈圈跑起不来(亲测可以)
聊聊 Nacos
Wireshark数据抓包分析之传输层协议(TCP协议)
Auto.js special positioning control method cannot perform blocking operations on the ui thread, please use setTimeout instead
自己做的选择
如何正确地配置入口文件?
优秀论文以及思路分析01
Visual Studio中vim模拟器
Go高性能之方法接收器 - 指针vs值
牛客网剑指offer刷题练习之链表中环的入口结点
科捷智能冲刺科创板:年营收12.8亿 顺丰与日日顺是股东
dataBinding的import导入
和睦家私有化后换帅:新风天域吴启楠任CEO 李碧菁靠边站
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
【软考 系统架构设计师】软件架构设计① 软件架构的概念
软件测试从业多年,自认为技术不错,裸辞:一晃 ,失业3个月了~
js显示隐藏手机号