121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
步骤一、确定状态:
确定dp数组及下标含义
dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串
步骤二、推断状态方程:
如果s[i] != s[j], 当前的dp[i][j] = False
如果s[i] == s[j], 这时候还得分三种情况:
下标i与j指向的是同一个下标, 也就是同一个字符,这时候肯定是True
下标i和j相差一个位置,比如aa, 这时候也是True
如果i和j相差大于1个位置的时候, 比如abca, abba,这种,dp[i][j]是不是回文子串 又得看dp[i+1][j-1]了。
所以此时d[i][j] = dp[i+1][i-1]
步骤三、规定初始条件:
初始条件:
全局初始化False, 而对角线初始化为True。
步骤四、计算顺序:
遍历i的时候一定要从下到 上遍历,这样才能保证,下 一行的数据是经过计算的。 即逆向遍历行,正向遍历列
class Solution:def longestPalindrome(self, s: str) -> str:if len(s) == 1:return s# dp数组定义,初始化dp = [[False for _ in range(len(s))] for _ in range(len(s))]# 对角线元素初始化for i in range(len(s)):dp[i][i] = 1left, right, max_length = 0, 0, 0for i in range(len(s) - 1, -1, -1):for j in range(i, len(s)):if s[j] == s[i]:if j - i <= 1 or dp[i+1][j-1]:dp[i][j] = True# 更新结果,在得到[i,j]区间内是否有回文子串的时候,保存左右边界if dp[i][j] and j - i + 1 > max_length:max_length = j - i + 1left = iright = jreturn s[left:right + 1]
121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)相关推荐
- LeetCode 5.最长回文子串(动态规划)
题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意 ...
- [动态规划|字符串] leetcode 5 最长回文子串
[动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...
- LeetCode 5. 最长回文子串(动态规划)
文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...
- 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)
最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...
- 20200117:(leetcode)最长回文子串(暴力法)
最长回文子串 题目 基本思路 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: ...
- leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- leetcode - 5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 解题思路: 对于一个字符串,回文子串存在两种情况,第一种情况是???a???的回文子串,第二种情况是???aa ...
- leetcode题解5-最长回文子串
问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同 ...
- LeetCode 516 最长回文子串
思路: 动态规划 dp数组:dp[i][j]表示s[i:j]最长回文子串长度 出口: ●i j相同, dp[i][j] 都为1 ●j=i+1,如果 s[j]=s[i] dp[i][j]=2, ...
最新文章
- 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
- watch监听对象里面值的变化_Vue总结——computed和watch的用法和区别
- 视觉三维重建的关键技术及实现
- 《程序员书屋》微刊创建,赠书活动进行中!
- Spring框架在属性注入时@Autowired和@Resource的区别
- 上海公布公交卡成本 押金拟从30元调至20元
- 2vec需要归一化吗_LTSM模型预测数据如何归一化?(知乎回答)
- 关于asp.net中partial,asp.net编译笔记
- javascript基本函数
- (转)WP7 开发学习(2):在WP7中使用网络请求
- (39)VHDL实现移位寄存器(方法1)
- 基于前后端分离的模版探索
- 程序猿趣图几张,第一张就亮瞎了..
- 高通三频802.11ac平台:家庭WiFi新体验?
- Vulnhub-Tiki
- 数据库查询的降序排列
- Oracle core读书笔记
- (二)Linux ALSA 音频系统:逻辑设备篇
- 类的封装(概念,如何封装)
- The Tips - F12开发者页面中英文切换
热门文章
- Visual Studio 在根目录下运行文件系统站点 [ Visual Studio | 文件系统 | WebDev.WebServer.EXE ]...
- 《JavaScript高效图形编程(修订版)》——第2章 DHTML基础 2.1创建DHTML sprite
- rac_安装软件时报版本号过高问题
- Apache Shiro 使用手册---转载
- CI中PHP写法规范(不断更新)
- Lotus Domino单用户多账号多邮件地址配置
- 开发IOT WiFi设备时,需要测试的几种情况
- 向一个有N个元素的顺序表中插入一个元素,平均要移动的次数为多少
- springboot第十一讲
- c51单片机的语言,51单片机,stm32,arduino都是用什么语言进行编程的?