代码随想录算法训练营day46|动态规划part12

今天就结束动态规划章节了,以后还要多加练习。

今天的两道题都很有难度,647回文子串的思路非常巧妙,因为用一维dp数组比较难表示子串的起点和终点,所以需要用二维dp数组表示,dpij表示以i为起点,j为终点的子串是不是回文子串,当si和sj不同时,该子串不是回文子串;当si==sj时,分类讨论:如果该子串的长度为1或2,则该子串就是回文子串,若该子串长度>2,则如果i+1,j-1是回文子串,则i,j,也是回文子串;

另外要注意的一点是这题的遍历顺序,因为dpij可能由左下角的值推导而来,所以需要从下往上,从左到右推导;

516最长回文子序列看起来好像和647回文子串很不一样,因为这题不是连续的子串而是中间可以有间隔,但是递推的思想其实是差不多的。同样定义二维dp数组,dpij表示以i为起点,j为终点中最长子串的长度,所以当si==sj时,dpij=dpi+1j-1+2;当si!=sj时,dpij就取dpij-1和dpi+1j的最大值。对于初始化,因为单个的字符是回文子串,所以dpii=1,其它的部分就初始化为0。

647. 回文子串

代码随想录

516.最长回文子序列

代码随想录

动态规划总结篇

代码随想录

相关推荐
其实防守也摸鱼12 小时前
个人学习 Pwn 思路:从基础到漏洞利用的进阶路径
大数据·前端·人工智能·chrome·算法·安全·网络安全
Nuanyt13 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
w_zero_one16 小时前
递归算法(一)
java·开发语言·算法
风影同志7832417 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
写的都是BUG18 小时前
APK 里的钥匙,一直就放在门口:聊聊加固真正该做什么
前端·算法
地平线开发者18 小时前
CLIP 的零样本分类:一组文本如何变成图像分类器?
算法
京东云开发者19 小时前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品
youshi666819 小时前
PID——算法改进
算法
一只不想敲代码的程序猿21 小时前
如何更高效地拆解问题?
算法