代码随想录打卡Day46

news2024/9/28 19:14:17

今天是动态规划的最后一天,终于要结束折磨了!!!今天的两道题,第一道看视频做的,第二道自己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.coloradmin.cn/o/2174509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能&#xff1a;平衡潜力与实用性 到 2025 年&#xff0c;人工智能将成为 IT 支出的重要驱动力&#xff0c;尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而&#xff0c;现实情况更加微…

4款工具搞定PDF去水印,线上+软件一应俱全!

作为一名文员&#xff0c;我每天都得和各种文档打交道&#xff0c;其中PDF文件是最常见的。有时候&#xff0c;我们收到的PDF文件会带有水印&#xff0c;这不仅影响了阅读体验&#xff0c;还可能在分享时造成不便。所以&#xff0c;学会如何去除PDF水印对我来说至关重要。今天&…

力扣 滑动窗口最大值

滑动窗口最大值 题目描述 题目分析 维护一个定长窗口的最大值&#xff0c;每当窗口滑动时都有一个新的元素进入和一个原有的元素离开。 比较简单的方法就是用一个优先队列维护窗口最大值 但是堆的计算成本时最坏时是 O ( n log ⁡ n ) O(n\log n) O(nlogn) 优化&#xff1a;…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹&#xff0c;将解压文件放进 pdf 文件…

面试加分必看,11道接口安全测试面试题!

今天&#xff0c;分享一些在面试中可能会遇到的接口安全测试面试问题&#xff0c;助你在面试中从容不迫。 01.HTTPS 与 HTTP 的区别&#xff1f; 02.OSI七层模型是指&#xff1f; 03.你所知道的 HTTP 状态码&#xff1f; 04.你知道SQL注入吗&#xff1f; 05.SQL 注入与XSS…

Xiaojie雷达之路---doa估计(dbf、capon、music算法)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本篇文章主要是介绍一下雷达信号处理中的dbf、capon、music测角算法,一起来看看吧!!! 前言 本文从信号模型、dbf原理、capon原理、music原理以及代码仿真进行展开描述。 信号模型 阵列接收到…

c++与Python用笛卡尔的心形函数输出爱心

我突然想到输出爱心是否可以用笛卡尔的心形函数 在IDLE里用Python输出下面这个图形 在小熊猫c里用c输出下面这个图形 如果当你要输出这些的时候会怎么办 低级:纯输出 print( ********* ********* ***************** ***************** …

Github + Hexo + Shoka搭建个人博客以及遇到的部分问题

博客预览&#xff1a; 主页&#xff1a; 文章&#xff1a; 博客语言链接&#xff1a; 全部分类 |mmjon 不在能知&#xff0c;乃在能行 Shoka官方博客&#xff1a; Yume Shoka 優萌初華 有夢書架 (lostyu.me) 1、准备 1、github账号 &#xff1a;自行去github官网注册…

人生苦短,我用Python✌

面向代码的解释型语言 数据开发和AI 编程语言:让计算机了解我们干什么&#xff0c;翻译官 1.下载软件 解释器安装 点击第二个 改路径 D:\python 安装 测试 winr打开 输入代码 输出 退出环境 exit&#xff08;&#xff09; 新建文本文档后缀改成py 编写 运行 安装编写代码…

MySQL 性能剖析全攻略

在使用 MySQL 数据库的过程中&#xff0c;性能问题往往是让开发者和管理员头疼的难题。为了有效地解决这些问题&#xff0c;我们需要对 MySQL 进行性能剖析。那么&#xff0c;如何在 MySQL 中进行性能剖析呢&#xff1f;本文将为你详细介绍。 一、为什么要进行性能剖析&#x…

$attrs 与 $listeners 怎么用

在组件 son、grandson 和 great-grandson 中都显示了 this is a sentence&#xff0c;而子组件 son 和孙组件 grandson 中都没有定义 props&#xff0c;说明 parent 组件中的数据正确的传递到了内部组件中。 打开控制台&#xff0c;分别点击组件 grandson 和 great-grandson 中…

用Python实现运筹学——Day 5: 单纯形法介绍

一、学习内容 1. 单纯形法的基本原理与步骤 单纯形法&#xff08;Simplex Method&#xff09;是求解线性规划问题的一种常用方法。它是一种迭代算法&#xff0c;用于在凸多边形的顶点上寻找目标函数的最优解&#xff0c;通常用于多变量的线性规划问题。单纯形法主要应用于线性…

如何查看上网记录及上网时间?5种按步操作的方法分享!【小白也能学会!】

“知己知彼&#xff0c;百战不殆”&#xff0c;在数字时代&#xff0c;了解自己的上网行为和时长&#xff0c;不仅能帮助我们更好地管理时间&#xff0c;还能提升工作效率和生活质量。 今天&#xff0c;我们就来分享五种简单易懂的方法&#xff0c;即便是网络小白也能轻松学会…

大模型分布式训练并行技术(九)-总结

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

基于Qt/C++UDP 调试软件功能及用途介绍

概述 UDP 调试软件是一个基于 Qt 框架的图形化应用程序&#xff0c;旨在提供一个简单易用的界面用于测试和调试 UDP&#xff08;用户数据报协议&#xff09;通信。该软件支持客户端和服务器模式&#xff0c;能够实现数据的发送和接收&#xff0c;方便开发者和网络工程师进行网…

PG数据库的Jsonb全文检索查询

1.操作键值对 PostgreSQL 对 jsonb 类型的筛选查询可以使用 -> 或者 ->> 操作符。 -> 操作符用于通过 JSON 对象中的键来获取对应的值。->> 操作符可以将获取到的值提取出来转化为字符串类型。 例如&#xff0c;下面是一个包含 jsonb 类型字段的表&#x…

企业IT安全重保服务:守护关键时刻的坚固防线

中国联通国际有限公司产品之IT安全重保服务&#xff1a;守护关键时刻的坚固防线 在数字化时代&#xff0c;信息安全已成为企业运营与国家安全的基石。随着各类重大活动、会议及内部专项工作的频繁举行&#xff0c;如何确保信息系统在关键时刻免受黑客攻击、网页篡改、病毒感染…

零工市场小程序的未来发展趋势

随着经济的发展&#xff0c;越来越多的人们选择了灵活就业的方式来工作&#xff0c;零工市场小程序作为灵活就业一个重要的媒介&#xff0c;未来的发展趋势如何呢&#xff1f; 其实在零工市场小程序中&#xff0c;有着大数据的分析、算法&#xff0c;可以精准的匹配到自由职业…

深度学习常见术语介绍

文章目录 数据集&#xff08;Dataset&#xff09;特征&#xff08;Feature&#xff09;标签&#xff08;Label&#xff09;训练集&#xff08;Training Set&#xff09;测试集&#xff08;Test Set&#xff09;验证集&#xff08;Validation Set&#xff09;模型&#xff08;Mo…

基于Hive和Hadoop的哔哩哔哩网站分析系统

本项目是一个基于大数据技术的哔哩哔哩平台分析系统&#xff0c;旨在为用户提供全面的哔哩哔哩视频数据和深入的用户行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xf…