步骤一、确定状态:

确定dp数组及下标含义
dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串

步骤二、推断状态方程:

在确定递推公式时,就要分析如下几种情况。 整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。 当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。 当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况 情况一:下标i 与 j相同,同一个字符例如a,当然是回文子串 情况二:下标i 与 j相差为1,例如aa,也是文子串

情况三:下标:i 与 j相差大于1的时候,例如cabac,此时s[i]与s[j]已经相同了,我们 看i到j区间是不是回文子串就看aba是不是回文就可以了,那么aba的区间就是 i+1 与 j-1区间,这个区间是不是回文就看dp[i + 1][j - 1]是否为true。

步骤三、规定初始条件:

初始条件:

全局初始化False, 而对角线初始化为True。

步骤四、计算顺序:

遍历i的时候一定要从下到 上遍历,这样才能保证,下 一行的数据是经过计算的。 即逆向遍历行,正向遍历列。

class Solution:def countSubstrings(self, s: str) -> int:if len(s) == 1:return 1dp = [[False for _ in range(len(s))] for _ in range(len(s))]result = 0for i in range(len(s)):dp[i][i] = Truefor i in range(len(s), -1, -1):for j in range(i, len(s)):if s[i] == s[j]:if j - i <= 1:result += 1dp[i][j] = Trueelif dp[i+1][j-1]:result += 1dp[i][j] = Truereturn result

122. Leetcode 647. 回文子串 (动态规划-子序列问题)相关推荐

  1. LeetCode 647. 回文子串 (动态规划)

    647. 回文子串 题意: 任意给定一个字符串,计算这个字符串的回文子串个数 解法1(暴力法) 思路: 默认回文子串初始个数为字符串长度 从子串长度为2-母串长度:找出所有的子串startIndex和 ...

  2. leetcode - 647. 回文子串

    647. 回文子串 ------------------------------------------ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串.具有不同开始位置或结束位置的子串, ...

  3. 《leetcode : 647. 回文子串 思考分析双指针解法》

    647. 回文子串 如何确定是回文串: 找中心然后往两边扩散,判断是否对称即可. 在遍历中心点的时候,注意中心点可以是一个元素也可以是两个元素. class Solution {public:int ...

  4. Java实现 LeetCode 647 回文子串(暴力)

    647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...

  5. 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串 步骤二.推断状态方程: 如果s[i] != s[j], 当前的dp[i][j] = Fa ...

  6. LeetCode 647. 回文子串(DP/中心扩展)

    文章目录 1. 题目 2. 解题 2.1 动态规划 2.2 中心扩展法 1. 题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组 ...

  7. Leetcode 647.回文子串

    Time: 20190905 Type: Medium 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不 ...

  8. LeetCode 647 回文子串

    题目链接:力扣 思路:动态规划 dp[i][j]表示s下标[i:j]的子串是否是回文串,问题转化为只要遍历dp数组,统计true的个数 确定边界情况: ●当i=j时,dp[i][i]表示s下标i到i的 ...

  9. 代码随想录补打卡 647 回文子串 516 最长回文子序列

    647 回文子串 代码如下 func countSubstrings(s string) int {    //dp[i][j]数组的含义是i-j这个范围的元素是否为回文串 dp := make([] ...

最新文章

  1. linux gzip 命令简介
  2. 行为模式之Intepreter模式
  3. jq轮播tab等特效果
  4. Leetcode每日一题:164.maximum-gap(最大间距)
  5. 自定义QListWidget实现item被hover时改变图标样式(模仿网易云音乐选项列表)(方法一)
  6. KMP + 求最小循环节 --- HDU 1358 Period
  7. eclipse与myeclipse恢复已删除的文件和代码
  8. 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
  9. 手机APP游戏/软件/资源下载站/软件盒子源码
  10. 算法导论第三版第一章答案
  11. C语言根号作用,c语言开根号(开根号编程)
  12. Overloud TH3 for Mac(电吉他效果器)
  13. 一个简洁的背单词、背短语python程序——英文背记系统(自用)
  14. kettle java交互_java程序中给Kettle传参数,其实很简单
  15. http文件上传到web服务器,上传到ftp服务器
  16. 歹徒逃亡(目前只有1和2,过后会更)
  17. 爱上Axure之软件基础视频教程-昝磊-专题视频课程
  18. 纸上得来终觉浅,绝知此事要躬行
  19. crmebpro2.3多店版,赠送PC版.可包更新,官方授权
  20. SpringBoot实战(四):SpringBoot整合Redis

热门文章

  1. Hibernate用Mysql数据库时链接关闭异常的解决
  2. replication crash safe
  3. 简单用数组模拟顺序栈(c++)
  4. (Mirage系列之十)Mirage经典案例之系统恢复
  5. JVM的垃圾回收与内存分配
  6. 科技日报头版显要位置报道国内多家企业投融资给力永中软件
  7. XP系统限制修改IP有新招
  8. Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]
  9. 有些话不知道怎么说才好
  10. 递归构造二叉树和二叉树的遍历