647.回文子串

dp杀我。

布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

当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。

如果这矩阵是从上到下,从左到右遍历,那么会用到没有计算过的dp[i + 1][j - 1],也就是根据不确定是不是回文的区间[i+1,j-1],来判断了[i,j]是不是回文,那结果一定是不对的。

所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。

class Solution {

public int countSubstrings(String s) {

int n=s.length();

int result=0;

boolean[][] dp=new boolean[n][n];

for(int i=n-1;i>=0;i--){

for(int j=i;j<n;j++){

if(s.charAt(i)==s.charAt(j)){

if(j-i<=1)

dp[i][j]=true;

else dp[i][j]=dp[i+1][j-1];

if(dp[i][j]==true)

result++;}

else dp[i][j]=false;

}

}

return result;

}

}

516.最长回文子序列

2个月前做过这题,不过再见到时又不会了,这个dp方程我感觉又有了新的理解,就是dp(i)(j)表示i到j的子串中最长回文子序列的长度,可以分类讨论由3种情况得出。

一是第i,j个字符都是最长回文的一部分,(2字符相同),

由dp(i+1)(j-1)+2得到。

当第i,j个字符不同,

二是只有第j个字符是最长回文的一部分,

由dp(i+1)(j)得到。

三是只有第i个字符是最长回文的一部分,

由dp(i)(j-1)得到。

不得不说dp蒸得难。

力扣(647.516)补9.15相关推荐

  1. 美团/力扣(647)--回文字串

    美团/力扣(647)–回文字串 文章目录 美团/力扣(647)--回文字串 一.题目描述 二.分析 方法一:中心扩散 代码一: 方法二:DP 代码二: 一.题目描述 力扣: 美团: 兄弟们!刷题的重要 ...

  2. 阿里、力扣、政采云的15位专家分享前端面试与招聘视角

    「始」前沿 有幸在5月31号参加了<第八届前端早早聊大会>主办的<前端跳槽的新起点|前端如何搞面试>.在这次大会中从早上9点半一直到下午6点多结束,大会含金量超高,我此次受益匪 ...

  3. leetcode力扣647. 回文子串

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

  4. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数

    文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...

  5. 力扣刷题记录-动态规划问题总结

    百度百科里对于动态规划问题是这样解释的: 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.因此各个阶段 ...

  6. 力扣--让字符串成为回文串的最少插入次数

    力扣–让字符串成为回文串的最少插入次数 文章目录 力扣--让字符串成为回文串的最少插入次数 一.题目描述 二.分析 三.代码 相关题目: 腾讯–构造回文:腾讯–构造回文 最长回文子串和回文链表:最长回 ...

  7. (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和

    代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...

  8. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java

    <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...

  9. 力扣第303场周赛补题

    力扣 第三题:设计食物评分系统 示例 输入 ["FoodRatings", "highestRated", "highestRated", ...

  10. 力扣(LeetCode)刷题,简单题(第15期)

    目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...

最新文章

  1. 写扩展性好的代码:函数
  2. 素数分布 - nefu 117
  3. C#中listView列自动适应缩放的完美效果
  4. c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
  5. python特性、属性以及私有化
  6. 我的职场战争--一年来的开发组内战实录
  7. validform 一行代码完成所有验证
  8. Google浏览器代理设置
  9. tjh_pipeline_tools Maya工具盒 1.2.1 下载及教程 动画影视团队工具共享系统
  10. 【爱思考】CISP考试基本介绍
  11. 十大思维导图软件推荐
  12. js中undefined
  13. 视频会议让教育培训插上腾飞的翅膀!
  14. 国内知名流程管理软件-汇总介绍
  15. 示波器FFT频谱分析的使用方法和注意点
  16. 过滤器(Filter)的实现方式
  17. quartus II使用
  18. 博弈论及算法实现(三种基础博弈)
  19. 数理统计之 置信区间(置信度)
  20. 举例跟踪分析Linux内核5.0系统调用处理过程

热门文章

  1. 电子技术部第四次培训总结
  2. 如何打开powershell 【超简单,一步完成】
  3. 【科软课程NLP】自然语言处理复习
  4. Python 抓取软科中国大学排名首页数据
  5. logback系列之四:输出日志到不同文件
  6. TensorFlow北大公开课学习笔记-8 复现vgg16并实现图片识别
  7. 旧金山犯罪预测与可视化分析
  8. edge打开pdf不显示印章_一旦碰到Edge浏览器打不开pdf文件,只需这样做就可完美解决!...
  9. vmware storage -2
  10. cmd怎么进入linux系统时间,在LINUX的命令提示符及CMD命令提示符中显示时间