Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动态规划问题-LeetCode 5 (经典DP问题、LCS问题)

动态规划问题-LeetCode 5 (经典DP问题、LCS问题)

作者头像
算法工程师之路
发布于 2019-09-17 10:24:27
发布于 2019-09-17 10:24:27
2.3K00
代码可运行
举报
运行总次数:0
代码可运行
作者:TeddyZhang,公众号:算法工程师之路

DP基础问题:LeetCode #5

1

编程题

【LeetCode #5】最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb"

解题思路:

前两天我们讲解了"中心拓展法"来解这道题目,今天我们使用动态规划的方法来写这道题目,首先我们要寻找一个递推式如下: 我们将f[i][j]表述为从j到i的子串为回文串,j <= i,此时dp的矩阵为左下三角! 如果a[i]==a[j]且f[i-1][j+1]=true, 那么f[i][j]也为true。

需要注意一点:当i-j < 2时,如果s[i]=s[j],那么f[i][j]必为true,即单个字符或者两个相邻相同字符为回文子串。

C++代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string longestPalindrome(string s) {
        int slen = s.length();
        if(slen == ) return "";
        string res = "";
        vector<vector<bool>> f(slen, vector<bool>(slen, false));
        int maxlen = ;
        int curlen = ;

        for(int i = ;i < slen; i++){
            for(int j = ;j <= i; j++){   // f[0][0]=true, 一定成立
                if((s[i] == s[j]) && ((i-j < ) || (i >  && f[i-1][j+]))){
                    f[i][j] = true;
                    curlen = i - j + ;
                    if(curlen > maxlen){
                        maxlen = curlen;
                        res = s.substr(j, curlen);
                    }
                }
            }
        }
        return res;
    }
};

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring

【经典动态规划】最长公共子序列

给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子序列,并返回其长度。 A = "Hello World" B = "loop" 则A与B的最长公共子序列为"loo", 返回最大长度为3.

注意:公共子序列不要求连续,而公共子串要求连续!

解题思路:

我们首先定义动态规划矩阵dp[i][j]为字符串A的第一个字符到第i个字符以及字符串B的第一个字符到第j个字符的最长公共子序列。比如A为"cake", B为"cat",则dp[2][3]表示"ca"和"cat"之间的最长公共子序列!其中dp[0][2]表示""和"ca"的最长公共子序列,为零! 因此我们可以得到递推式为:

其中,dp[i][0] = 0, dp[0][j] = 0.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LCS
{
public:
    int findLCS(string A, int n, string B, int m)
    {
        if(n ==  || m == )//特殊输入
            return ;
        int dp[n + ][m + ];//定义状态数组
        for(int i =  ; i <= n; i++)//初始状态
            dp[i][] = ;
        for(int i = ; i <= m; i++)
            dp[][i] = ;
        for(int i = ; i <= n; i++)
            for(int j = ; j<= m; j++)
            {
                if(A[i - ] == B[j - ])//判断A的第i个字符和B的第j个字符是否相同
                    dp[i][j] = dp[i -1][j - ] + ;
                else
                    dp[i][j] = max(dp[i - ][j],dp[i][j - ]);
            }
            return dp[n][m];//最终的返回结果就是dp[n][m]
    }
};

【经典动态规划】最长公共子串

给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子串,并返回其长度。例如: A = "HelloWorld" B = "loop" 则A与B的最长公共子串为 "lo",返回的长度为2。

解题思路:

最长公共子串的问题不同于最长公共子序列,由于子串的连续的,而子序列不一定连续。在上一个子序列中dp[i][j]是非减的,因此最后返回最大公共子序列时,返回的是dp[n][m]。而在最大子串问题中,dp[i][j]可能小于dp[i-1][j-1],因此需要一个res来保存更新最大值。

通俗考虑,在两个子串中寻找,假设a[i]==b[j]了,那么从i和j向后走,res会一直更新变大,一旦遇到不相等时,则dp[i][j]清零,寻找下一个重复的子串。因此其递推式为:

其中dp[i][0] = 0, dp[0][j] = 0;

C++代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LongestSubstring {
public:
    int findLongest(string A, int n, string B, int m) {
         if(n ==  || m == )
            return ;
        int rs = ;
        int dp[n + ][m + ];
        for(int i =  ; i <= n; i++)//初始状态
            dp[i][] = ;
        for(int i = ; i <= m; i++)
            dp[][i] = ;
        for(int i = ; i <= n; i++)
            for(int j = ; j<= m; j++)
            {
                if(A[i - ] == B[j - ])
                {
                    dp[i][j] = dp[i -1][j - ] + ;
                    rs = max(rs,dp[i][j]);//每次更新记录最大值
                }

                else//不相等的情况
                    dp[i][j] = ;
            }
            return rs;//返回的结果为rs
    }
};

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
4K演播室系统配置方案音频工作站录音软件
1 音频工作站主机 GeekPro 14代i7-14700F RTX4060Ti 8GB显卡32G DDR5 1TB SSD,32寸显示器
北京乐冉科技--录音棚系统集成
2025/04/28
640
4K演播室系统配置方案音频工作站录音软件
录音棚设备包括什么?选用什么比较好?
1 工作站计算机 APPLE Mac Studio(含键鼠) "Apple M4 Max (14 核中央处理器、32 核图形处理器和 16 核神经网络引擎)
北京乐冉科技--录音棚系统集成
2025/04/29
960
录音棚设备包括什么?选用什么比较好?
数媒清单包含什么设备?技术参数怎么写?
压缩器:阀值+22dBu-8dBu,比率1:1-4:1,输出:0dBu-7dB处理时间:约25毫秒,释放时间:约300毫秒
北京乐冉科技--录音棚系统集成
2025/04/29
850
数媒清单包含什么设备?技术参数怎么写?
5.1录音棚及演播室都有哪些设备?都有哪些功能?
1 电脑 GARR AUDIO 定制 1 支 "1、音频工作站,定制主板、定制机型,可上机架;
北京乐冉科技--录音棚系统集成
2025/04/29
1110
5.1录音棚及演播室都有哪些设备?都有哪些功能?
让苹果“沦为配角”的华为都发布了什么?
不知是巧合还是故意为之,继昨天苹果召开春季发布会后,华为也在巴黎召开了P30系列发布会。
AI科技大本营
2019/05/06
4640
让苹果“沦为配角”的华为都发布了什么?
相机-小底M43无用
前端时间写了篇什么人生第一台单反是GH3,其实不是,应该是半幅APS-C,今天查东西又看见自己的文章了,这里也写一下这个所谓的M43系统是不是一个好的选择。
云深无际
2023/02/27
4840
相机-小底M43无用
Lytro 一代资料.缘起
在14年的时候我就知道这个相机了,铺天盖地的说是要革了传统相机的命,喊的口号就是“先拍照后对焦”,据称是博士在MIT看见自己的好朋友给自己女儿拍照的时候,抓不到最好看的容颜,就结合自己的所学,要打造一款不用对焦的相机(解释一下,只不过对焦放在最后面的算法的)。
云深无际
2021/01/06
8530
Lytro 一代资料.缘起
关于俱乐部演播室录音棚升级需要哪些
3.多音源混音输出,包括 HDMI/NDI 嵌入音频、DDR 音频、外部输入音频。
北京乐冉科技--录音棚系统集成
2025/05/22
760
关于俱乐部演播室录音棚升级需要哪些
首发二代骁龙7+平台,Redmi Note 12 Turbo定价1999元起!传联发科天玑8000/9000系列迭代芯片被砍
3月28日,小米集团旗下子品牌Redmi召开春季新品发布会,正式发布了Redmi Note 12 Turbo,主打大内存+大存储(8+256起步),并首发高通第二代骁龙7+处理器,定价竟然低至1999元起,堪称“价格屠夫”。此外Redmi还宣布与华纳兄弟探索集团合作,带来了全球首款哈利·波特定制手机——Note 12 Turbo哈利·波特版。
芯智讯
2023/04/11
6640
首发二代骁龙7+平台,Redmi Note 12 Turbo定价1999元起!传联发科天玑8000/9000系列迭代芯片被砍
通过模块化Moto Z重新发明手机,联想的野心究竟有多大?
9月6日,在iPhone 7 发布前夕,联想正式在国内发布了两款Moto Z系列手机:Moto Z和Moto Z Play,似乎有截胡iPhone 7的意思。Moto Z早在3个月前已经在美国发布过,
罗超频道
2018/04/27
7260
通过模块化Moto Z重新发明手机,联想的野心究竟有多大?
NAB SHOW 2018进行时丨迪士尼/ABC推出稳定器DigiBoom,AMBEO智能耳机令人瞩目
正文共:2364 字 7 图 预计阅读时间: 6 分钟 今日,是NAB SHOW 2018最后一天,展会依然在如火如荼的进行中。过去几天里,我们已经看到了许多AR/VR、AI以及相机方面精彩的技术和产
VRPinea
2018/05/18
7310
四款5G版iPhone 12齐发,苹果股价却应声而跌
真快,又见面了。北京时间 10 月 14 日凌晨 1 点,Apple 举办的新品发布会如约而至。今年有关 iPhone 新品的到来有些迟,好在「5G just got real」,万众期待的 iPhone 终于可以访问 5G 超宽屏网络了。
AI科技大本营
2020/10/27
5580
四款5G版iPhone 12齐发,苹果股价却应声而跌
Sony 全画幅微单狗头推荐
动了凡心了,想买全画幅了,目前想入坑Sony,选中的机器有Sony A7(一代),Sony A7M2K,Sony A7R1,还有Sony A7S,以及Sony A7R2.
云深无际
2023/02/27
1.8K0
Sony 全画幅微单狗头推荐
安防监控系统入门——监控系统常用设备介绍
云台就是两个交流电组成的安装平台,可以水平和垂直的运动。我们所说的云台区别于照相器材中的云台,照相器材的云台一般来说只是一个三脚架,只能通过手来调节方位;而监控系统所说的云台是通过控制系统在远端可以控制其转动方向的。
网络技术联盟站
2021/07/08
2.5K0
盘点|即将发售的VR头显及配件
或许,大家可能在短时间内不能一睹Quest 3的风采,但是根据小P最新的整理显示预计即将发售(已确认日期)的VR设备及配件也不少呢!让我们来看看吧!
VRPinea
2023/03/06
5560
盘点|即将发售的VR头显及配件
苹果最强芯片M1 Ultra亮相!两个M1 Max胶水拼接,性能爆表
---- 新智元报道   编辑:编辑部 【新智元导读】苹果春季发布会,库克告诉你什么叫1+1=2。 3月9日凌晨2点,苹果春季发布会,库克出了王炸。 M2没来,M2 MacBook Air更不用想了。 这次,库克直接带了M1的续杯,也是M1家族最后一位——M1 Ultra。 简单说,就是M1 Max+M1 Max,性能可不得炸裂么!!! 另外,搭载M1 Ultra的「造梦引擎」Mac Studio,高配59999元,还有它的伴侣Studio Display首发上线。 老
新智元
2022/03/09
1K0
360度相机大盘点,这个假期带着全景相机去旅行吧!
360度全景相机的出现给人们的生活带来了无限的可能。小巧的装置却可以拍摄出沉浸感十足的互动式视频内容。目前市面上已经有了数十种全景相机,小编在此就对目前比较知名的360度相机进行一次盘点。 诺基亚OZ
VRPinea
2018/05/14
1.4K0
掀开蓝厂X90 Pro+一英寸大底,满眼硬核技术有点数不过来
机器之心原创 作者:泽南 vivo 给后来者树立了一个难以超越的标杆。 有这样一款手机,它帮你解决了抓拍焦虑,快门响应时间只有 30 毫秒,相当于专业相机: 原本需要用三脚架固定,长时间曝光才能拍出的星空,现在双手拿手机就可以拍出来。 在拍摄远处景物的时候,这款手机强大的传感器可以给照片留下前所未有的真实细节: 这并不是个概念机型,而是正在流行的旗舰。11 月 22 日,vivo 正式发布了 X90 系列,这代手机除了首发天玑 9200,搭载自研芯片 V2 等重要升级之外,大杯和超大杯机型一英寸传感器
机器之心
2023/03/29
3130
掀开蓝厂X90 Pro+一英寸大底,满眼硬核技术有点数不过来
神秘七年、融资23亿美元,Magic Leap终于发售首款产品,被吐槽full of shit
三年前,Magic Leap是最神秘也是最火的高科技公司。通过多段演示视频,这家公司的产品被认为可以实现裸眼3D全息特效。
量子位
2018/08/21
4930
神秘七年、融资23亿美元,Magic Leap终于发售首款产品,被吐槽full of shit
小米13系列正式发布:徕卡三摄+骁龙8 Gen 2,3999元起售
12 月 11 日,小米公司召开 Xiaomi 13 & MIUI14 新品发布会,正式推出全新旗舰 Xiaomi 13 系列。作为小米徕卡联合研发的第二代影像旗舰,Xiaomi13 系列采用全新设计,并搭载了大量来自 Xiaomi 12S Ultra 的徕卡专业影像能力,具备徕卡光学镜头,徕卡原生双画质,同时带来全新的徕卡超色彩影像、徕卡浮动镜头等光学和计算摄影能力。第二代骁龙 ®8 旗舰移动平台为 Xiaomi 13 系列带来强劲性能,并全系搭载澎湃电池管理系统。全新影像旗舰 Xiaomi 13 系列售价 3999 元起。
芯智讯
2023/02/09
6030
推荐阅读
相关推荐
4K演播室系统配置方案音频工作站录音软件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验