步骤一、确定状态:

确定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. 最长回文子串 (动态规划-子序列问题)相关推荐

  1. LeetCode 5.最长回文子串(动态规划)

    题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意 ...

  2. [动态规划|字符串] leetcode 5 最长回文子串

    [动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...

  3. LeetCode 5. 最长回文子串(动态规划)

    文章目录 1. 题目 2. 解题 2.1 自己写的DP 2.2 优化后的DP 2.3 中心扩展法 1. 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. ...

  4. 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)

    最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...

  5. 20200117:(leetcode)最长回文子串(暴力法)

    最长回文子串 题目 基本思路 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: ...

  6. leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  7. leetcode - 5. 最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 解题思路: 对于一个字符串,回文子串存在两种情况,第一种情况是???a???的回文子串,第二种情况是???aa ...

  8. leetcode题解5-最长回文子串

    问题描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同 ...

  9. 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, ...

最新文章

  1. 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
  2. watch监听对象里面值的变化_Vue总结——computed和watch的用法和区别
  3. 视觉三维重建的关键技术及实现
  4. 《程序员书屋》微刊创建,赠书活动进行中!
  5. Spring框架在属性注入时@Autowired和@Resource的区别
  6. 上海公布公交卡成本 押金拟从30元调至20元
  7. 2vec需要归一化吗_LTSM模型预测数据如何归一化?(知乎回答)
  8. 关于asp.net中partial,asp.net编译笔记
  9. javascript基本函数
  10. (转)WP7 开发学习(2):在WP7中使用网络请求
  11. (39)VHDL实现移位寄存器(方法1)
  12. 基于前后端分离的模版探索
  13. 程序猿趣图几张,第一张就亮瞎了..
  14. 高通三频802.11ac平台:家庭WiFi新体验?
  15. Vulnhub-Tiki
  16. 数据库查询的降序排列
  17. Oracle core读书笔记
  18. (二)Linux ALSA 音频系统:逻辑设备篇
  19. 类的封装(概念,如何封装)
  20. The Tips - F12开发者页面中英文切换

热门文章

  1. Visual Studio 在根目录下运行文件系统站点 [ Visual Studio | 文件系统 | WebDev.WebServer.EXE ]...
  2. 《JavaScript高效图形编程(修订版)》——第2章 DHTML基础 2.1创建DHTML sprite
  3. rac_安装软件时报版本号过高问题
  4. Apache Shiro 使用手册---转载
  5. CI中PHP写法规范(不断更新)
  6. Lotus Domino单用户多账号多邮件地址配置
  7. 开发IOT WiFi设备时,需要测试的几种情况
  8. 向一个有N个元素的顺序表中插入一个元素,平均要移动的次数为多少
  9. springboot第十一讲
  10. c51单片机的语言,51单片机,stm32,arduino都是用什么语言进行编程的?