力扣(647.516)补9.15
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相关推荐
- 美团/力扣(647)--回文字串
美团/力扣(647)–回文字串 文章目录 美团/力扣(647)--回文字串 一.题目描述 二.分析 方法一:中心扩散 代码一: 方法二:DP 代码二: 一.题目描述 力扣: 美团: 兄弟们!刷题的重要 ...
- 阿里、力扣、政采云的15位专家分享前端面试与招聘视角
「始」前沿 有幸在5月31号参加了<第八届前端早早聊大会>主办的<前端跳槽的新起点|前端如何搞面试>.在这次大会中从早上9点半一直到下午6点多结束,大会含金量超高,我此次受益匪 ...
- leetcode力扣647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" 输 ...
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
文章目录 题目 思路 AC代码 后记 题目 从房屋收集雨水需要的最少水桶数 思路 思路是贪心,因为我们需要从左向右找寻所有的水桶数,所以我们对于每一个房屋都优先判断右边是否能放水桶,右边不能放就看左边 ...
- 力扣刷题记录-动态规划问题总结
百度百科里对于动态规划问题是这样解释的: 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.因此各个阶段 ...
- 力扣--让字符串成为回文串的最少插入次数
力扣–让字符串成为回文串的最少插入次数 文章目录 力扣--让字符串成为回文串的最少插入次数 一.题目描述 二.分析 三.代码 相关题目: 腾讯–构造回文:腾讯–构造回文 最长回文子串和回文链表:最长回 ...
- (补)算法训练第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和
代码随想录算法训练营第七天|力扣454.四数相加II ,383. 赎金信,15. 三数之和,18. 四数之和 454.四数相加II 题目链接:四数相加II 参考:https://programmerc ...
- 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
<LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...
- 力扣第303场周赛补题
力扣 第三题:设计食物评分系统 示例 输入 ["FoodRatings", "highestRated", "highestRated", ...
- 力扣(LeetCode)刷题,简单题(第15期)
目录 第1题:将整数转换为两个无零整数的和 第2题:一周中的第几天 第3题:把二叉搜索树转换为累加树 第4题:连续字符 第5题:拿硬币 第6题:删除中间节点 第7题:猜数字 第8题:整数的各位积和之差 ...
最新文章
- 写扩展性好的代码:函数
- 素数分布 - nefu 117
- C#中listView列自动适应缩放的完美效果
- c 结构体 不允许使用不完整的类型_.NET Core 基础类型介绍
- python特性、属性以及私有化
- 我的职场战争--一年来的开发组内战实录
- validform 一行代码完成所有验证
- Google浏览器代理设置
- tjh_pipeline_tools Maya工具盒 1.2.1 下载及教程 动画影视团队工具共享系统
- 【爱思考】CISP考试基本介绍
- 十大思维导图软件推荐
- js中undefined
- 视频会议让教育培训插上腾飞的翅膀!
- 国内知名流程管理软件-汇总介绍
- 示波器FFT频谱分析的使用方法和注意点
- 过滤器(Filter)的实现方式
- quartus II使用
- 博弈论及算法实现(三种基础博弈)
- 数理统计之 置信区间(置信度)
- 举例跟踪分析Linux内核5.0系统调用处理过程