122. Leetcode 647. 回文子串 (动态规划-子序列问题)
步骤一、确定状态:
确定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. 回文子串 (动态规划-子序列问题)相关推荐
- LeetCode 647. 回文子串 (动态规划)
647. 回文子串 题意: 任意给定一个字符串,计算这个字符串的回文子串个数 解法1(暴力法) 思路: 默认回文子串初始个数为字符串长度 从子串长度为2-母串长度:找出所有的子串startIndex和 ...
- leetcode - 647. 回文子串
647. 回文子串 ------------------------------------------ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串.具有不同开始位置或结束位置的子串, ...
- 《leetcode : 647. 回文子串 思考分析双指针解法》
647. 回文子串 如何确定是回文串: 找中心然后往两边扩散,判断是否对称即可. 在遍历中心点的时候,注意中心点可以是一个元素也可以是两个元素. class Solution {public:int ...
- Java实现 LeetCode 647 回文子串(暴力)
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...
- 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j] 表示的是区间范围[i,j] 的子串是否是回文子串 步骤二.推断状态方程: 如果s[i] != s[j], 当前的dp[i][j] = Fa ...
- LeetCode 647. 回文子串(DP/中心扩展)
文章目录 1. 题目 2. 解题 2.1 动态规划 2.2 中心扩展法 1. 题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组 ...
- Leetcode 647.回文子串
Time: 20190905 Type: Medium 题目描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不 ...
- LeetCode 647 回文子串
题目链接:力扣 思路:动态规划 dp[i][j]表示s下标[i:j]的子串是否是回文串,问题转化为只要遍历dp数组,统计true的个数 确定边界情况: ●当i=j时,dp[i][i]表示s下标i到i的 ...
- 代码随想录补打卡 647 回文子串 516 最长回文子序列
647 回文子串 代码如下 func countSubstrings(s string) int { //dp[i][j]数组的含义是i-j这个范围的元素是否为回文串 dp := make([] ...
最新文章
- linux gzip 命令简介
- 行为模式之Intepreter模式
- jq轮播tab等特效果
- Leetcode每日一题:164.maximum-gap(最大间距)
- 自定义QListWidget实现item被hover时改变图标样式(模仿网易云音乐选项列表)(方法一)
- KMP + 求最小循环节 --- HDU 1358 Period
- eclipse与myeclipse恢复已删除的文件和代码
- 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
- 手机APP游戏/软件/资源下载站/软件盒子源码
- 算法导论第三版第一章答案
- C语言根号作用,c语言开根号(开根号编程)
- Overloud TH3 for Mac(电吉他效果器)
- 一个简洁的背单词、背短语python程序——英文背记系统(自用)
- kettle java交互_java程序中给Kettle传参数,其实很简单
- http文件上传到web服务器,上传到ftp服务器
- 歹徒逃亡(目前只有1和2,过后会更)
- 爱上Axure之软件基础视频教程-昝磊-专题视频课程
- 纸上得来终觉浅,绝知此事要躬行
- crmebpro2.3多店版,赠送PC版.可包更新,官方授权
- SpringBoot实战(四):SpringBoot整合Redis