每日一题:LCR 095.最长公共子序列(DP)

题目描述:

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:

输入:text1 = "abcde", text2 = "ace" 
输出:3  
解释:最长公共子序列是 "ace" ,它的长度为 3 。

示例 2:

输入:text1 = "abc", text2 = "abc"
输出:3
解释:最长公共子序列是 "abc" ,它的长度为 3 。

示例 3:

输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0 。

提示:

  • 1 <= text1.length, text2.length <= 1000
  • text1 和 text2 仅由小写英文字符组成。

思路:

本题采用动态规划的思想,是一道很经典的动态规划问题,我们把查找公共子序列问题一步一步压缩成最小子问题。创建dp表,写出状态转移方程,本题难点在于如何求出状态转移方程。

首先,第一种情况当最后一个字符相同时,我们只要比较前n-1个字符,第二种情况,当最后一个字符不同时,我们将一个字符串的最后一位相前移动一个比较。

如图:

然后代码实现时注意细节:我们dp表要创建的是m+1和n+1的大小,好进行初始化。

代码实现

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int m=text1.size();int n=text2.size();vector<vector<int>> dp(m+1,vector<int>(n+1,0));for(int i=1;i<m+1;i++){for(int j=1;j<n+1;j++){if(text1[i-1]==text2[j-1])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}return dp[m][n];}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nvm安装教程, 实现nodejs多版本切换

文章目录 前言下载安装步骤切换下载镜像管理node查看版本安装指定版本使用指定版本卸载指定版本 nvm基本命令参考 前言 刚在做项目需要用到nodejs 16以上, 而我的本地安装是nodejs15, 想办法升级一下nodejs的版本. 查阅资料后发现可以下载 nvm&#xff08;Node.js 版本管理工…

【设计模式】RBAC 模型详解

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、什么是 RBAC 呢&#xff1f; 二、RBAC 的组成 三、RBAC 的优缺点 3.1 优点&#xff1a; 3.2 缺点&#xff1a; 四、RBAC 的…

putty免密登录和跳转到winscp相同目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Web前端-JavaScript(Dom基础)

文章目录 1.1 DOM 介绍1.1.1 DOM简介1.1.2 DOM树 1.2. 获取元素1.2.1 根据ID获取元素1.2.2 根据标签名获取元素1.2.3 其它方式获取元素1.2.4 获取特殊元素 1.3 事件基础1.3.1 事件概述1.3.2 事件三要素1.3.3 执行事件步骤1.3.4 鼠标事件 1.4 操作元素1.4.1 操作元素内容1.4.2 属…

HTML制作一个给图片压缩的网页高质量图片压缩并保存到本地

请各位自己创建index.html文件并将一下代码复制到文本中。配合下方下载的插件共同使用&#xff08;插件需要和index.html文件放到同一个文件夹&#xff09; 点我查看演示站 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8&…

1979 年至今的每日地面气象数据AgERA5 (ECMWF) 数据集

AgERA5 (ECMWF) 数据集 1979 年至今的每日地面气象数据&#xff0c;作为农业和农业生态研究的输入。该数据集基于地表每小时 ECMWF ERA5 数据&#xff0c;称为 AgERA5。原始ERA5数据的采集和预处理是一项复杂且专业的工作。通过提供 AgERA5 数据集&#xff0c;用户可以从这项工…

143.【Nginx-02】

Nginx-02 (五)、Nginx负载均衡1.负载均衡概述2.负载均衡的原理及处理流程(1).负载均衡的作用 3.负载均衡常用的处理方式(1).用户手动选择(2).DNS轮询方式(3).四/七层负载均衡(4).Nginx七层负载均衡指令 ⭐(5).Nginx七层负载均衡的实现流程 ⭐ 4.负载均衡状态(1).down (停用)(2)…

Pixelmator Pro 中文

Pixelmator Pro是一款专为Mac用户设计的强大图像编辑软件。它提供了丰富的功能和直观的界面&#xff0c;使用户可以轻松进行各种图像处理任务。该软件支持各种文件格式&#xff0c;包括JPEG、PNG、GIF、BMP和TIFF等&#xff0c;并可导入Photoshop的psd文件。它提供了丰富的绘画…

设计模式----解释器模式

一、简介 解释器模式使用频率并不高&#xff0c;通常用来构建一个简单语言的语法解释器&#xff0c;它只在一些非常特定的领域被用到&#xff0c;比如编译器、规则引擎、正则表达式、sql解析等。 解释器模式是行为型设计模式之一&#xff0c;它的原始定义为&#xff1a;用于定义…

SSTI模板注入基础(Flask+Jinja2)

文章目录 一、前置知识1.1 模板引擎1.2 渲染 二、SSTI模板注入2.1 原理2.2 沙箱逃逸沙箱逃逸payload讲解其他重要payload 2.3 过滤绕过点.被过滤下划线_被过滤单双引号 "被过滤中括号[]被过滤关键字被过滤 三、PasecaCTF-2019-Web-Flask SSTI参考文献 一、前置知识 1.1 模…

Linux(一)Linux理论

文章目录 一、Linux概述1.1 体系结构1.1.1 Linux内核1.1.2 用户态与内核态1.1.3 交换空间1.1.4 CLI和GUI 1.2 开机启动过程1.3 系统运行级别1.4 Linux进程1.4.1 Linux进程通信的方法1.4.2 Linux进程状态 二、文件2.1 Linux文件系统2.2 目录结构2.3 绝对路径和相对路径2.4 日志文…

刷题第五十一天 84. 柱状图中最大矩形

好难&#xff0c;看解析&#xff1a; # 双指针 class Solution:def largestRectangleArea(self, heights: List[int]) -> int:size len(heights)# 两个DP数列储存的均是下标indexmin_left_index [0] * sizemin_right_index [0] * sizeresult 0# 记录每个柱子的左侧第一…