Leetcode 516. 最长回文序列 区间dp C++实现

Leetcode 516. 最长回文序列

问题:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

算法1:记忆化搜索

        双指针,left 指针指向最左边,right 指针指向最右边,当 s [ left ] == s [ right ] 时,回文数 + 2 ,两者不相等时,左指针 left 右移或者右指针 right 左移。

时间复杂度:O(n²) 。

        其中 ns 的长度。动态规划的时间复杂度 = 状态个数 × 单个状态的转移个数。本题中状态个数等于 O(n²),而单个状态的转移个数为 O(1),因此时间复杂度为 O(n²)

空间复杂度:O(n²) 。

        保存多少状态,就需要多少空间。

代码:

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.length();vector<vector<int>> memo(n,vector<int>(n,-1));auto dfs = [&](auto &&dfs,int left,int right) -> int{if(left > right)    return 0;if(left == right)   return 1;int& res = memo[left][right];if(res != -1)   return res;if(s[left] == s[right]) return dfs(dfs,left + 1,right - 1) + 2;return max(dfs(dfs,left + 1,right),dfs(dfs,left,right - 1));};return dfs(dfs,0,n - 1);}
};

算法2:1:1 翻译成递推

        如何思考循环顺序?什么时候要正序,什么时候要倒序?

        这里有一个通用的做法:盯着状态转移方程,想一想,要计算 dp [ i ] [ j ] ,必须先把 dp [ i + 1 ] [ ⋅ ] 算出来,那么只有 i 从大到小枚举才能做到。对于 j 来说,由于在计算 dp [ i ] [ j ] 的时候,需要用到 dp [ i ] [ j − 1 ] ,也就是必须先把 dp [ i ] [ j − 1 ] 算出来,所以 j 必须从小到大枚举。

时间复杂度:O(n²) 。

        其中 n s 的长度。动态规划的时间复杂度 = 状态个数 × 单个状态的转移个数。本题中状态个数等于 O(n²),而单个状态的转移个数为 O(1),因此时间复杂度为 O(n²)

空间复杂度:O(n²) 。

代码:

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.length();vector<vector<int>> dp(n,vector<int>(n));for(int i = n - 1;i >= 0;i--){dp[i][i] = 1;for(int j = i + 1;j < n;j++)dp[i][j] = s[i] == s[j] ? dp[i + 1][j - 1] + 2 : max(dp[i][j - 1],dp[i + 1][j]);}return dp[0][n - 1];}
};

算法3:空间优化

        把 dp 数组的第一个维度去掉。相当于把 dp [ i ] dp [ i + 1 ] 保存到同一个一维数组中。

但一个萝卜一个坑,dp [ j − 1 ] 要么保存的是 dp [ i + 1 ] [ j −  1 ] ,要么保存的是 dp [ i ] [ j − 1 ] ,怎么妥当地处理新旧数据?对于本题来说,可以用变量 pre 记录 dp [ i + 1 ] [ j  − 1 ] 的值。计算到 dp [ j ] 时,dp [ j − 1 ] 保存的是新数据 dp [ i ] [ j − 1 ],旧数据 dp [ i + 1 ] [ j − 1 ] 可以从 pre 中取到。

时间复杂度:O(n²) ,其中 为 s 的长度。

空间复杂度:O(n) 

代码:

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.length();vector<int> dp(n);for(int i = n - 1;i >= 0;i--){dp[i] = 1;int pre = 0;for(int j = i + 1;j < n;j++){int tmp = dp[j];dp[j] = s[i] == s[j] ? pre + 2 : max(dp[j],dp[j - 1]);pre = tmp;}}return dp[n - 1];}
};

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

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

相关文章

检查一个复数C的实部a和虚部b是否都是有限数值即a和b都不是无限数值、空值cmath.isfinite(x)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 检查一个复数C的实部a和虚部b 是否都是有限数值 即a和b都不是无限数值、空值 cmath.isfinite(x) [太阳]选择题 根据给定的Python代码&#xff0c;哪个选项是错误的&#xff1f; import cma…

Ubuntu 20.04 解决 nvidia-smi 出错问题

目录 一、初始问题 二、解决方法 2.1 法一 2.2 法二 三、新的问题 3.1 解决方案 3.2 进一步解决 3.3 最后解决 一、初始问题 今天要在本机上装个环境时&#xff0c;运行了一下 nvidia-smi 突然遇到一个问题&#xff1a; Failed to initialize NVML: Driver/library ver…

文件格式转换:EXCEL和CSV文件格式互相转换

目录 1.EXCEl和CSV文件格式互相转换1.1首先安装所需的Python包1.2excel转换为csv代码如下:1.3csv转换为excel代码如下:由于excel文件在数学建模数据处理当中的局限性,我们通常把excel文件转换为csv文件来处理,下面是相关的代码,我直接封装成函数,你们直接调用即可,我会添…

R语言进行无序多分类Logistic回归

在临床研究中&#xff0c;接触最多的是二分类数据&#xff0c;如淋巴癌是否转移&#xff0c;是否死亡&#xff0c;这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程&#xff0c;可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据&#xf…

C++:类和对象全解

C&#xff1a;类和对象全解 一、类的定义和初始化&#xff08;一&#xff09;类的定义1、类的成员变量&#xff08;1&#xff09;成员变量&#xff08;2&#xff09;成员函数 2、实例化对象&#xff08;1&#xff09;采用普通构造函数&#xff08;2&#xff09;采用初始化列表 …

【鸿蒙开发 day12】

鸿蒙开发-布局进阶 一.定位1.绝对定位2.相对定位3.定位案例-VIP 二.Z序控制三.层叠布局四.bilibili卡片案例五.list列表容器组件滚动条状态列表分割线 六.通用属性七.动画八.图形变换1.平移2.定位结合平移实现精准定位3.旋转和缩放 九.总结 一.定位 作用&#xff1a;改变组件位…

MOS管和三极管有什么区别?

MOS管是基于金属-氧化物-半导体结构的场效应晶体管&#xff0c;它的控制电压作用于氧化物层&#xff0c;通过调节栅极电势来控制源漏电流。MOS管是FET中的一种&#xff0c;现主要用增强型MOS管&#xff0c;分为PMOS和NMOS。 MOS管的三个极分别是G(栅极)&#xff0c;D(漏极)&…

PCL 点云基于高程渲染颜色

目录 一、概述 1.1原理 1.2实现步骤 1.3 应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 本文将介绍如何使用PCL库…

[通信原理]绪论2:信息量 × 信息熵

我们知道信息是一个抽象的概念&#xff0c;它既不是物质也不是能量。那么我们要如何对一个抽象的概念进行一个定量的研究呢&#xff1f; 信息量 1、信息的度量 通信的本质是传递信息&#xff0c;为了定量表征信息的度量&#xff0c;引入信息量的概念。消息中所含信息量与其不…

AIGC-初体验

线性分类 提问&#xff0c;目的试图让AI自动线性分类 A类&#xff1a;(10,21),&#xff08;3,7&#xff09;,(9,20&#xff09;(121,242) B类&#xff1a;(3,9),(5,11),(70,212),(11,34) 根据线性关系分类 请问 (100,300)&#xff0c;&#xff08;100&#xff0c;201&#xff…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

2024最新版零基础学习Modbus通信协议(保姆级教程)

合集 - 上位机开发(2) 1.零基础学习Modbus通信协议09-13 2.RS485与ModbusRTU09-10 收起 大家好&#xff01;我是付工。 2012年开始接触Modbus协议&#xff0c;至今已经有10多年了&#xff0c;从开始的懵懂&#xff0c;到后来的顿悟&#xff0c;再到现在的开悟&#xff0c;…

YOLOv8改进 | 融合改进 | C2f融合重写星辰网络⭐以及CAA【二次融合 +​ CVPR2024】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

win10安装JDK12并配置环境

Java SE 、Java EE和Java ME的区别 Java SE&#xff08;Standard Edition&#xff09;‌ 是Java语言的标准版&#xff0c;也被称为Java平台标准版。 Java EE&#xff08;Enterprise Edition&#xff09;‌ 是基于Java SE构建的企业版&#xff0c;专门用于开发企业级应用。它扩…

ESP32聊天机器人之一

想做情感陪伴机器人&#xff0c;看到B站有个项目很有趣&#xff0c;使用一块esp32复刻了B站MeteWu的ESP32大模型聊天项目。 自己做了一些修改&#xff0c;加了一些简单的表情&#xff0c;角色扮演&#xff0c;切换大模型和温湿度传感器等功能。可以用于玩具&#xff0c;聊天机…

【React源码解析】深入理解react时间切片和fiber架构

时间切片 假如React一个更新需要耗时200ms&#xff0c;我们可以将其拆分为40个5ms的更新&#xff08;后续会讲到如何拆分&#xff09;&#xff0c;然后每一帧里只花5ms来执行更新。那么&#xff0c;每一帧里不就剩余16.7 - 5 11.7ms的时间可以进行用户事件&#xff0c;渲染等…

立足本土,面向全球 | 全视通闪耀亮相Medical Fair Asia新加坡医疗展

Medical Fair Asia是亚洲地区最大的医疗设备、医疗器械和医疗技术展览会之一&#xff0c;自1997年创办以来&#xff0c;每两年在新加坡举办一次。该展会不仅是新加坡医疗行业交流的龙头平台&#xff0c;也是亚洲乃至全球医疗企业和专业人士共聚一堂、展示最新产品和技术的重要舞…

非关系型数据库Redis

文章目录 一&#xff0c;关系型数据库和非关系型数据可区别1.关系型数据库2.非关系型数据库3.区别3.1存储方式3.2扩展方式3.2事务性的支持 二&#xff0c;非关系型数据为什么产生三&#xff0c;Redis1.Redis是什么2.Redis优点3.Redis适用范围4. Redis 快的原因4.1 基于内存运行…

某讯/企鹅滑块验证码逆向(一)

文章目录 免责声明前言请求分析collect参数 总结 免责声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…