1143. 最长公共子序列(详细版)

目录

dp解法:

1.状态代表什么:

2. 状态转移方程

3.初始化

3. so为什么要这样?

代码实现:



给定两个字符串 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 。

对于text1 = "abcde", text2 = "ace",初始化一个二维数组。把这个dp数组填满就结束了这道题。 

dp数组
i,j

a

bcdef
a111111
c112222
e112233
f112234

dp解法:

1.状态代表什么:

        ***** dp[i][j]表示遍历到s[i]到s[j]的最长的公共子串的数量

2. 状态转移方程

当text1[i]!=text2[j]时,dp[i][j]=max{dp[i][j-1],dp[i-1][j]  }

当text1[i]==text2[j]时,dp[i][j]=1+dp[i-1][j-1]

3.初始化

        ***** dp二维数组全部初始化为0,这行吗?这当然不行

对于这一列,dp[i-1][j-1]就会报错。虽然python中  dp[-1][-1]这种 不会报错,但是与思路也不符,所以我们应该

dp初始化
i,j

a

bcdef
0000000
a0111111
c0112222
e0112233
f0112234

3. so为什么要这样?

        **** 对于每一个字符,我们可以有两种做法,取与不取。如果字符不同,我们就不取,dp[i][j]就是上一个状态的最大值,比如ab,ad,最大值一定会取到a的状态。如果相同的话,我们可以取,也可以不取。当出现ab,bb这种情况。对于b我们不取,dp[i][k]=max{dp[i-1][j-1]}。如果出现ac,ac,我们取c,则dp[i][j]=dp[i-1][j-1]+1

4. 代码实现:

python

class Solution(object):def longestCommonSubsequence(self, text1, text2):""":type text1: str:type text2: str:rtype: int"""dp=[[0]*(len(text2)+1) for _ in range(len(text1)+1)]for i in range(1,len(text1)+1):for j in range(1,len(text2)+1):if text1[i-1]==text2[j-1]:dp[i][j]=dp[i-1][j-1]+1else:dp[i][j]=max(dp[i-1][j],dp[i][j-1])return dp[len(text1)][len(text2)]

这里的dp,len(text1+1)是行数,len(text2)+1是列数 

java版

class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp = new int[text1.length() + 1][text2.length() + 1];for (int i = 1; i <= text1.length(); i++) {for (int j = 1; j <= text2.length(); j++) {if (text1.charAt(i - 1) == text2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[text1.length()][text2.length()];}
}

c++版 

#include <iostream>
#include <vector>
#include <algorithm>int longestCommonSubsequence(std::string text1, std::string text2) {std::vector<std::vector<int>> dp(text1.size() + 1, std::vector<int>(text2.size() + 1, 0));for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); j++) {if (text1[i - 1] == text2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;} else {dp[i][j] = std::max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[text1.size()][text2.size()];
}

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

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

相关文章

从小白到架构师:万字长文 | 社交媒体应用系统设计

移动互联网时代&#xff0c;社交媒体应用彻底改变了我们联系和共享信息的方式。这些平台在幕后处理庞大的用户群、数据存储和实时交互。 在本文中&#xff0c;我们将深入探讨如何设计一个可扩展且高性能的社交媒体应用系统。我们将探讨关键组件、流程图、功能需求以及容量规划…

数据分析详解

一、数据分析教程 1. 入门教程 在线课程&#xff1a;如Coursera、Udemy、网易云课堂等平台提供了大量数据分析的入门课程&#xff0c;涵盖统计学基础、Python/R语言编程、数据可视化等内容。书籍推荐&#xff1a;《Python数据分析实战》、《R语言实战》等书籍是数据分析入门的…

Github 2024-07-27 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Tauri: 构建小型、快速和安全的桌面应用程序 创建周期:1673 天开发语言:Rust协议类型:Apache Lic…

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…

Gitops-Argo-Cli安装与使用

一、安装Argo-Cli工具 Release v2.9.21 argoproj/argo-cd GitHub **选择合适的符合你操作系统以及CPU架构的二进制文件 #依v2.9.21-X86-64-Linux操作系统为例 wget https://github.com/argoproj/argo-cd/releases/download/v2.9.21/argocd-linux-amd64 #添加执行权限并且移…

ubuntu20.04安装RabbitMQ +Erlang

ubuntu20.04安装RabbitMQ 3.11.19Erlang 25.3.1_ubuntu20.04.6 安装 rabbitmq-CSDN博客 LINUX下载编译libpng_linux libpng下载-CSDN博客 Ubuntu20.04 安装 Nginx 软件报错&#xff1a;libgd3 缺少 libpng12-0 依赖 Ubuntu安装RabbitMq&#xff08;保姆级教学&#xff0c;直…

论文中的流程图参考图片

写论文的时候&#xff0c;在绘制流程图时&#xff0c;一直纠结n是大写还是小写&#xff0c;用不用斜体&#xff0c;号两边要不要空格。今天找到了一张标准的流程图来参考。图片来自 Zhi-Chang Ba et al, Combination of DCE-MRI and NME-DWI via Deep Neural Network for Predi…

虚拟机复制后网络不可用,报错“network.service - LSB: Bring up/down networking”

查询IP地址&#xff0c;eth33 没有显示IP地址 尝试重启&#xff0c;有报错&#xff0c;并且有提示&#xff0c;按照提示执行下看看 解决办法 chkconfig NetworkManager offsystemctl disable NetworkManager.serviceservice NetworkManager stopservice network restart 之后检…

2222222222

222222222222222

“在工作中学习”和“根据遇到的问题捡知识”两者有巨大不同

目前整个软件行业越来越需要一堆多面手&#xff0c;也许现在已经是这样了&#xff0c;只是我还没有注意到。当然&#xff0c;我也不喜欢这种情。现在&#xff0c;好像没有人愿意花更多的时间来把某一个东西学好学深学扎实 编程语言推荐&#xff1a; C 语言不用多说&#xff…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码&#xff1a; 上报模块Makefile代码&#xff1a; STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

C语言画蜡烛图

GPT-4o (OpenAI) 在C语言中&#xff0c;绘制蜡烛图&#xff08;Candlestick Chart&#xff09;不是直接的任务&#xff0c;因为C语言本身不包含高级图形绘制库。然而&#xff0c;可以通过某些图形库来完成这项任务&#xff0c;例如使用GTK、SDL、OpenGL等。 以下是通过GTK库绘…

react中的useState和Hook、副作用

react的组件分为类组件和函数组件&#xff0c;Hook 是一种特殊的函数&#xff0c;可以让你在函数组件中使用类组件中才有的一些特性。useState、useEffect、useReducer都是Hook。其中useState用于在函数组件中添加状态&#xff0c;useEffect用于在函数组件中执行副作用&#xf…

机器学习 - 随机森林降方差公式推导

背景 在随机森林算法中&#xff0c;我们通过对数据集进行多次采样&#xff08;有放回地抽样&#xff09;并训练多个决策树模型&#xff0c;然后将这些模型的预测结果进行平均来得到最终的预测结果。这样做的一个重要好处是能够降低模型的方差&#xff08;Variance&#xff09;…

高级java每日一道面试题-2024年7月27日-并发篇-Thread类中的yield方法有什么作用?

面试官: Thread类中的yield方法有什么作用? 我回答: Java 的 Thread 类中的 yield 方法是一个线程调度相关的API&#xff0c;它的作用是让当前正在运行的线程放弃CPU时间片&#xff0c;使得其他具有相同优先级的线程有机会被执行。下面我们详细探讨一下 yield 方法的作用和使…

【笔记-软考】层次式架构-业务逻辑层架构设计

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-28 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 组件设计 业务逻辑组件包括两部分&#xff1a;接口和实现&#xff0c;其中接口用于定义组件必须实现的方法&#xff0c;其可以让控制…

2399. 检查相同字母间的距离(python3)

两种解法&#xff1a; 第一种&#xff0c;暴力解法&#xff0c;采用双重循环&#xff0c;解决问题&#xff08;时间复杂度较高&#xff09; class Solution:def checkDistances(self, s: str, distance: List[int]) -> bool:n len(s)for i in range(n):for j in range(i …

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

论文写作之latex配置(VSCODE+TEXT LIVE)

1.overleaf 初学者学习latex可以用这个练习&#xff0c;可以在线编辑十分方便&#xff0c;但是编译时间受限制 网站&#xff1a;https://www.overleaf.com/project 2.Tex live 选择一个.iso文件下载 网站&#xff1a;Index of /CTAN/systems/texlive/Images/ 下载成功&am…

exuberant ctags 支持 typescript 解析

exuberant ctags 支持 typescript 解析 exuberant ctags 是 GNU ctags 的替代品。 最近在看 nodejs 的项目代码&#xff0c;老规矩用它生成 tags 文件在 vim 中看。 可惜对于项目中的 typescript 文件&#xff0c;无法识别及解析。 查了下是否能让 ctags 支持 typescript 分析…