39. 647. 回文子串,516.最长回文子序列, 动态规划总结

news2024/11/25 19:55:23

  1. 确定dp数组以及下标的含义。如果大家做了很多这种子序列相关的题目,在定义dp数组的时候 很自然就会想题目求什么,我们就如何定义dp数组。绝大多数题目确实是这样,不过本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话,我们会发现很难找到递归关系。由于判断一个子字符串(字符串下标范围[i, j])是否回文,依赖于子字符串(下标范围[i + 1, j - 1]))是否是回文。明确了这种递归关系,我们的dp数组是要定义成一位二维dp数组。布尔类型的dp[i] [j]:表示区间范围[i, j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i] [j]为true,否则为false。
  2. 确定递推公式。在确定递推公式时,就要分析如下几种情况。整体上是两种,就是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。
  3.  dp数组如何初始化。
  4. 确定遍历顺序。首先从递推公式中可以看出,情况三是根据dp[i + 1] [j - 1]是否为true,再对dp[i][j]进行赋值true的。dp[i + 1] [j - 1] 在 dp[i] [j]的左下角。如果这矩阵是从上到下,从左到右遍历,那么会用到没有计算过的dp[i + 1] [j - 1],也就是根据不确定是不是回文的区间[i+1, j-1],来判断了[i, j]是不是回文,那结果一定是不对的。所以一定要从下到上,从左到右遍历,这样保证dp[i + 1] [j - 1]都是经过计算的

class Solution {
public:
    int countSubstrings(string s) {

        int res = 0;
        vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));

        for(int i = 0; i < s.size(); i++) {dp[i][i] = true; res++;}

        for(int i = s.size() - 1; i >= 0; i--){
            for(int j = i + 1; j < s.size(); j++){
                if(s[i] == s[j] && j - i <= 1){
                     dp[i][j] = true; res++;
                }
                else if(s[i] == s[j] && dp[i + 1][j - 1]) {
                    dp[i][j] = true; res++;
                }
            }
        }
        return res;
    }
};

  1. 确定dp数组(dp table)以及下标的含义。dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]
  2. 确定递推公式。在判断回文子串的题目中,关键逻辑就是看s[i]与s[j]是否相同。如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;、如果s[i]与s[j]不相同,说明s[i]和s[j]的同时加入 并不能增加[i, j]区间回文子序列的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])。

class Solution {
public:
    int longestPalindromeSubseq(string s) {

        vector<vector<int>> dp(s.size(), vector<int>(s.size()));

        for(int i = 0; i < s.size(); i++) dp[i][i] = 1;

        for(int i = s.size() - 1; i >= 0; i--){
            for(int j = i + 1; j < s.size(); j++){
                if(s[i] == s[j]) 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][s.size() - 1];
    }
};

 动态规划总结:代码随想录 

 

 

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

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

相关文章

Weblogic 漏洞(详细)

一.weblogic弱口令 访问一下默认用户名&#xff1a;weblogic 密码&#xff1a; Oracle123 然后点击安装 然后再点击上传文件 将jsp木马打包&#xff0c;改为war上传一直下一步&#xff0c;最后点完成 然后使用工具连接 二.CVE-2017-3506 使用工具检测&#xff0c;存在漏洞 …

【C++】模拟实现stack

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 ​ 目录 一.了解项目功能 &#x1f4cc;了解stack官方标准 &#x1f4cc;了解模拟实现stack 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现stack成员变量 &…

[pdf]240道《软件方法》强化自测题业务建模需求分析共201页(202408更新)

链接&#xff1a; http://www.umlchina.com/url/quizad.html 如果需要提取码&#xff1a;umlc 文件夹中的“潘加宇《软件方法》强化自测题业务建模需求分析共240题.pdf”

【MATLAB第107期】基于MATLAB的Morris全局敏感性分析模型(无目标函数)

【MATLAB第107期】基于MATLAB的Morris全局敏感性分析模型&#xff08;无目标函数&#xff09; 一、原理介绍 1.基本原理&#xff1a; Morris方法采用概率均匀抽样的方式估计每个模型输入因子在输出结果中的重要性&#xff0c;通过比较系统在不同输入参数值上的输出结果变化来…

智观察 | 行业赛道里的AI大模型

‍ “AI改变世界”被炒得热火朝天&#xff0c;结果就换来AI聊天&#xff1f; 实际上&#xff0c;在日常娱乐之下&#xff0c;AI正在暗暗“憋大招”&#xff0c;深入各行各业&#xff0c;发挥更专业的作用。 自动驾驶 最近“萝卜快跑”霸榜热搜长达一周&#xff0c;让无人驾…

ECMAScript 6 入门 学习 日志笔记 2024/8/6 13:59

就读书籍: ECMAScript 6 入门 作者&#xff1a;阮一峰https://www.ruanyifeng.com/ 个人理解笔记 { } 块级 函数不能先用后声明 Let 优先函数表达 不可重复声明同一变量 { letfunction (){ } } 不谈其他,只要在{ } 中即可 ,简单暴力理解 const 和 let 类似 …

语言模型-神经网络模型(二)

神经网络模型语言模型 神经网络模型神经网络的分类神经网络模型和Ngram对比应用一-话者分离对比优劣 应用二-数字归一化应用三-文本打标 神经网络模型 释义&#xff1a; 与ngram模型相似使用&#xff0c;前n个词预测下一个词&#xff0c;输出在字表上的概率分布&#xff1b;过…

【Playwright+Python】使用Playwright进行API接口测试

在当今的自动化测试领域&#xff0c;结合Web UI和API接口测试已成为提升测试覆盖率和效率的关键。Playwright作为一个强大的自动化测试工具&#xff0c;除了在Web UI测试中大放异彩&#xff0c;还能与Python结合&#xff0c;实现强大的API接口测试功能。本文将带你探索如何使用…

面试软件测试岗:经典面试题!全背下来,月薪10K起步...

背题是一个快速应付面试的方式&#xff0c;但如果你想在软件测试行业稳步前进、步步为营的话&#xff0c;建议大家还是有序学习软件测试知识&#xff0c;积累够了&#xff0c;转行、跳槽都是顺其自然的。 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; …

告别录屏难题:2024四大热门电脑录屏软件推荐

进行在线教学、游戏直播、制作教程视频&#xff0c;录屏已成为我们日常生活和工作的重要需求。电脑怎么录屏&#xff1f;一款好用的录屏软件十分重要。今天&#xff0c;我们就来为大家推荐四款实用的电脑录屏工具。 1. 福昕录屏大师&#xff1a;专业级录屏&#xff0c;满足多样…

深入理解接口测试:实用指南与最佳实践(四)IHRM管理系统实战-项目分析

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这一阶段是接口测试的学习&#xff0c;我们接下来的讲解都是使用Postman这款工具&#xff0c;当然呢Postman是现在一款非常流行的接口调试工具&#xff0c;它使用简单&#xff0c;而且功能也很强大。不仅测试人员会使用…

前端获取视频文件宽高信息和视频时长

安装 yarn add video-metadata-thumbnails | npm install video-metadata-thumbnails引入依赖包 import { getMetadata } from video-metadata-thumbnails使用 if (file.name.includes(mp4)) {if (file) {try {console.log(file)// 获取视频的元数据const metadata await …

Linux基础笔记分享(超详细~)

文章目录 Linux基础1.基础概念2.基础命令命令行快捷键自动补全: tab移动光标快速删除翻看历史命令终止程序退出登录清屏 查看命令帮助alias命令别名-快捷键pwd-类似于地图cd-类似于传送术mkdir-类似于合成装备touch-创建文件ls-类似于查看装备tree-打印目录层级结构cp-复制命令…

快速上手AWS cloudfront产品

AWS CloudFront&#xff0c;亚马逊推出的卓越全球内容分发网络服务&#xff0c;专为加速网站内容的极速传输而设计&#xff0c;旨在大幅度削减加载延迟&#xff0c;同时确保内容传递过程中的高度安全性和无懈可击的可靠性。借助CloudFront的强大功能&#xff0c;用户能够轻松实…

6个适用于Linux具有数据加密功能的绝佳软件和应用

数据加密在如今的网络安全领域是一个不可或缺的功能。该功能支持您编码数据&#xff0c;让没有访问权限的其他人无法读懂您的数据。若要增强在网络上的安全性&#xff0c;选择使用默认拥有此实用功能的软件或许是个不错的办法。 在本文中&#xff0c;您将了解到一系列运行在Li…

C++空指针(nullptr)

C空指针(nullptr) ​ 在C语言中我们把空指针定义成NULL&#xff0c;但是这在C中会有所问题&#xff0c;因为C对指针类型转换比较严格。下面让我来深入了解一下NULL与nullptr。 NULL实际就是一个宏&#xff0c;在C头文件(stddef.h)中&#xff0c;可以看到如下代码&#xff1a;…

vue3学习day03-vue3的生命周期、父子通信、模版引用、defineExpose

11、vue3的生命周期 &#xff08;1&#xff09;Vue2中生命周期&#xff1a; beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed &#xff08;2&#xff09;选项式API的生命周期&#xff1a; BeforeCreate/created、beforeMou…

TCP协议及ip

传输控制协议 通信前必须建立连接 tcp传输数据可靠 这就和大家的qq号和手机号一样 没有完全相同的qq号和手机号 端口号&#xff1a;1-65535 的一个整数 1-1024 通过端口号可确定哪一个程序在运行 应用程序的id 自定义端口号5999之后 在Qt中使用网络通信 套…

Apache Dolphinscheduler在中创新航的落地与实践

背景介绍 我司中创新航&#xff08;CALB&#xff09;&#xff0c;是全球领先的新能源科技企业 &#xff0c;致力于成为能源价值[创造者](<https://baike.baidu.com/item/创造者/10818258?fromModulelemma_inlink" t "/Users/shangeyao/Documents\x/_blank>)&…