代码随想录打卡Day46

今天是动态规划的最后一天,终于要结束折磨了!!!今天的两道题,第一道看视频做的,第二道自己AC的,开心!!!!

647. 回文子串

这道题不能用一维dp数组来做,必须用二维dp数组,我认为这道题目的dp数组定义很关键,这道题的dp数组定义为:字符串在s[i]-s[j]的范围的字符串片段是否为回文串(true or false), 递推公式也不难想,首先讨论一般情况:当s[i] == s[j]时,如果i和j相差很远,那么i和j范围内的字符串是否为回文子串就取决于i + 1和j - 1包围住的字符串是否为回文子串,所以有dp[i][j] = dp[i + 1][j - 1];如果j - i <= 1(相邻或者指向同一字符),此时对应"a"或者"aa"的情况,这个时候直接令dp[i][j] = true即可。如果s[i] != s[j]的话,直接令dp[i][j] = false。
这道题不太注重初始化条件,但是有一点,绝对不能全部初始化成true就行。
另外,这道题的遍历顺序一定一定要注意,从递推公式来看,是从左下角向右上角推导的,所以遍历的时候需要从左往右,从下往上遍历!!!

class Solution {
public:
    int countSubstrings(string s) {
        //1.确定dp[i][j]的含义:字符串在s[i]-s[j]的范围的字符串片段是否为回文串(true or false), 
        //2.确定递推公式dp[i][j] = dp[i + 1][j - 1];
        //          or dp[i][j] = false;
        //3.dp数组初始化 dp[i][j] = false;
        //4.确定遍历顺序:从左往右,从下往上遍历
        //5.打印数组(省略)
        int m = s.size();
        vector<vector<bool>> dp(m, vector<bool> (m, false));
        int result = 0;
        for(int i = m - 1; i >= 0; i--){
            for(int j = i; j < m; j++){
                if(s[i] == s[j]){
                    if(j - i <= 1){  //i == j || i == j - 1
                        dp[i][j] = true;
                        result++;
                    }     
                    else{
                        dp[i][j] = dp[i + 1][j - 1];
                        if(dp[i][j]) result++;
                    }    
                }
            }
        }
        return result;
    }
};

516.最长回文子序列

这道题目和上一道题还是有差别的,首先题目问的是最长回文子序列,如果dp数组还是存储布尔值的话,无法体现出回文子序列的长度,因此本题dp数组的定义为:字符串在s[i]-s[j]的范围的字符串片段中最长回文子串的长度为dp[i][j],在递推公式上,如果s[i] == s[j],如果在i和j相差很大的情况下,则dp[i][j]应当在内侧的最长回文子序列的基础上加2,如果j - i <= 1的情况下,dp[i][j] = j - i + 1;如果s[i] != s[j],则i + 1, j包围的字符串或者i,j - 1包围的字符串中仍有可能存在回文子序列,所以需要对这两种情况取较大值,存入dp[i][j]中,即dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])。
在初始化上也没有特别需要注意的地方,遍历顺序依然是从左往右,从下往上。

class Solution {
public:
    int longestPalindromeSubseq(string s) {
        //1.确定dp[i][j]的含义:字符串在s[i]-s[j]的范围的字符串片段中最长回文子串的长度为dp[i][j],
        //2.确定递推公式dp[i][j] = dp[i + 1][j - 1] + 2;
        //          or dp[i][j] = dp[i + 1][j] || dp[i][j - 1];
        //3.dp数组初始化 dp[i][j] = false;
        //4.确定遍历顺序:从左往右,从下往上遍历
        //5.打印数组(省略)
        int m = s.size();
        int result = 0;
        vector<vector<int>> dp(m, vector<int> (m, 0));
        for(int i = m - 1; i >= 0; i--){
            for(int j = i; j < m; j++){
                if(s[i] == s[j]){
                    if(j - i <= 1)
                        dp[i][j] = j - i + 1;
                    else
                        dp[i][j] = dp[i + 1][j - 1] + 2;
                }
                else
                    dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
            }
        }
        return dp[0][m - 1];
    }
};

动态规划完结撒花!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884415.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BAAI 团队发布多模态模型 Emu3

在人工智能的浩瀚海洋中&#xff0c;一艘名为Emu3的创新之船正在破浪前行&#xff0c;为我们展示了多模态AI的无限可能。这个由Meta AI研究团队开发的革命性模型&#xff0c;通过简单而巧妙的"下一步预测"机制&#xff0c;实现了文本、图像和视频的统一处理。 Emu3的…

linux服务器部署filebeat

# 下载filebeat curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.23-linux-x86_64.tar.gz # 解压 tar xzvf filebeat-7.17.23-linux-x86_64.tar.gz# 所在位置&#xff08;自定义&#xff09; /opt/filebeat-7.17.23-linux-x86_64/filebeat.ym…

k8s StorageClass 存储类

文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner&#xff08;存储制备器&#xff09;1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy&#xff08;回收策略&#xff09;3、allowVolumeExpansion&#xff08;允许…

探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿

0.概述 论文地址&#xff1a;https://arxiv.org/abs/2404.06571 本研究探讨了制造系统集成商如何构建知识图谱来识别新的制造合作伙伴&#xff0c;并通过供应链多样化来降低风险。它提出了一种使用制造服务知识图谱&#xff08;MSKG&#xff09;提高 ChatGPT 响应准确性和完整…

告别背锅侠!29个空场景及测试方法的实战指南

想必大家在日常的测试工作中&#xff0c;经常会碰到以下这些场景&#xff1a; 场景一&#xff1a; 测试人员&#xff1a;有一个数据为空的场景还没有验证。 研发人员&#xff1a;这个场景不会出现&#xff0c;因为没有删除逻辑。 场景二&#xff1a; 研发人员&#xff1a;…

蓝桥杯模块二:数码管的静态、动态实现

模块二训练 1.静态显示 一、数码管电路图 二、电路分析 1.数码管电路分析 端口分公共端和段码&#xff0c;先用公共端控制一个数码管&#xff0c;再用段码实现显示数字。共阳数码管公共端输入高电平&#xff0c;段码输入低电平实现点亮 2.锁存器 Y7控制段码&#xff0c;Y6控…

【含文档】基于Springboot+微信小程序 的中心医院用户移动端(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

全志科技发布T536高性能智慧工业芯片,飞凌嵌入式率先推出配套核心板

2024年9月24日下午&#xff0c;全志科技在中国国际工业博览会上成功举办了其最新产品——T536高性能智慧工业芯片的全球首发发布会。这款芯片采用创新的4核Cortex-A55与RISC-V混合架构&#xff0c;主频分别达到1.6GHz和600MHz&#xff0c;并集成了2TOPS算力的NPU&#xff0c;吸…

生信初学者教程(四):软件

文章目录 RRstudioLinux系统其他软件本书是使用R语言编写的教程,用户需要下载R和RStudio软件用于进行分析。 版权归生信学习者所有,禁止商业和盗版使用,侵权必究 R R语言是一种免费的统计计算和图形化编程语言,是一种用于数据分析和统计建模的强大工具。它具有丰富的统计…

耦合微带线单元的网络参量和等效电路公式推导

文档下载链接&#xff1a;耦合微带线单元的网络参量和等效电路资源-CSDN文库https://download.csdn.net/download/lu2289504634/89583027笔者水平有限&#xff0c;错误之处欢迎留言&#xff01; 一、耦合微带线奇偶模详细推导过程 二、2,4端口开路 三、2端口短路、3端口开路 四…

智能密码、指纹锁语音芯片ic方案 可存放40s语音内容 NVD语音芯片

随着科技的飞速发展&#xff0c;智能家居安全领域迎来了前所未有的变革。智能密码与指纹锁作为现代家庭安全防护的重要一环&#xff0c;其背后的语音芯片IC开发更是这一变革中的关键技术突破。 智能密码、指纹锁语音芯片ic方案 选型与简介&#xff1a; NVD语音芯片是一款低成…

quiz: python网络爬虫之规则1

下面答错了&#xff1a; B c 8A&#xff0c; 9A

STM32F407之超声波模块使用

#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "HC_SR04.h"int main() {OS_ERR err;//错误uart_init(9600);//串口初始化//超声波初始化HC_SR04();//OS初始化 他是第一个运行的函…

【大数据】数据中台怎么样助力企业创新和客户实践

在当今数字化时代&#xff0c;数据成为了企业竞争的关键因素。企业拥有大量的数据&#xff0c;但如何高效地利用这些数据&#xff0c;实现创新和提升客户体验&#xff0c;成为了一项重要的挑战。数据中台作为一种重要的数据管理和分析工具&#xff0c;发挥着关键的作用。本文将…

大数据毕业设计选题推荐-食品销售数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

数集相等定义凸显“R各元x的对应x+1的全体=R”是几百年重大错误

黄小宁 变量x所取各数也均由x代表&#xff0c;x代表其变域&#xff08;x所有能取的数组成的集&#xff09;内任一元。设集A&#xff5b;x&#xff5d;表A各元均由x代表&#xff0c;&#xff5b;x&#xff5d;中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标所以x∈R变换…

AWS Network Firewall -NAT网关配置只应许白名单域名出入站

1. 创建防火墙 选择防火墙的归属子网&#xff08;选择公有子网&#xff09; 2. 创建规则白名单域名放行 3. 绑定相关规则 继续往下拉 绑定非托管规则 4. 配置网络路由 相关规则 参考图 解释 防火墙的归属公有子网路由表规则机器实例的规则子网路由表规则nat网管路…

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上&#xff0c;基本完成用户模块的登录接口的主逻辑以及提到了问题&#xff1a;"用户未登录&#xff0c;需要通过登录&#xff0c;获取到令牌进行登录认证&#xff0c;…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装&#xff0c; 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器&#xff0c;用于确保在…