【代码随想录算法训练营第五十天|1143.最长公共子序列、1035.不相交的线、53.最大子数组和、392.判断子序列】

文章目录

  • 1143.最长公共子序列
  • 1035.不相交的线
  • 53.最大子数组和
  • 392.判断子序列

1143.最长公共子序列

和最长连续子序列的区别是,除了在text1[i]==text2[j]的时候要令dp[i][j] = dp[i-1][j-1] + 1之外,在不相等的时候dp[i][j]同样需要赋值,在text1和text2分别不考虑当前元素时剩下的子序列的最大公共子序列长度赋给dp[i][j]。

class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:len1 = len(text1)len2 = len(text2)dp = [[0]*(len2+1) for _ in range(len1+1)] # dp[i][j]表示的是text1[:i-1]和text[:j-1]中的最长公共子序列ans = 0for i in range(1, len1+1):for j in range(1, len2+1):if text1[i-1] == text2[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = max(dp[i][j-1], dp[i-1][j])if dp[i][j] > ans:ans = dp[i][j]return ans

1035.不相交的线

和上一题一样的,都是找最大的公共子序列(连线只能全下右或者全下左,但是本质上是同样的排列顺序的子序列,所以和上题一样。

class Solution:def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:len1 = len(nums1)len2 = len(nums2)dp = [[0]*(len2+1) for _ in range(len1+1)]ans = 0for i in range(1, len1+1):for j in range(1, len2+1):if nums1[i-1] == nums2[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = max(dp[i][j-1], dp[i-1][j])if dp[i][j] > ans:ans = dp[i][j]return ans

53.最大子数组和

dp数组表示前i位数组的最大子数组和,dp[i-1]+nums[i]表示的是前面连续的最大数组和加上该位的值,与这个相比较的是nums[i],因为如果dp[i-1]为负数则需要丢弃前面的部分,从nums[i]重新开始计算。

class Solution:def maxSubArray(self, nums: List[int]) -> int:dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(nums[i], dp[i-1]+nums[i])return max(dp)

392.判断子序列

和上面也基本一致,就是最后统计一下最大公共子序列长度和s的长度是否一致,还有一个就是在两个元素不相等的时候,dp[i][j]的值取的是在同一个s的元素下,去匹配的上一个t的子字符串的dp值。

class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp = [[0]*(len(t)+1) for _ in range(len(s)+1)]for i in range(1, len(s)+1):for j in range(1, len(t)+1):if s[i-1] == t[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = dp[i][j-1]return dp[-1][-1] == len(s)

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

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

相关文章

Map的五种遍历方式

在Java中,Map是一种键值对的集合,用于存储键值对的数据结构。它提供了一种通过键来查找和访问值的方式,每个键都是唯一的,而值可以重复。 特点和常见实现类 键值对的存储:Map以键值对(key-value pair&#…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM,并采用它们在电影评论数据集上实现文本分类,会涉及以下几个知识点。 1. 词表构建:包括数据清洗,词频统计,词频截断,词表构建。 2. 预训练词向量应用:下载并加载Glove的…

鸿蒙星河NEXT学习笔记

1.1 字符串 // 变量的存储和修改(string number boolean) // 1. 变量存储 // 1.1 字符串 string 类型 // 注意点1:字符串需要用引号引起来(单引双引号)字符串 "字符串" // 注意点2:存储的时候&a…

Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

文章目录 前言单节点模式开启认证生成节点证书修改ES配置文件为内置账号添加密码Kibana修改配置验证 ES集群开启认证验证 前言 ES安装完成并运行,默认情况下是允许任何用户访问的,这样并不安全,可以为ES开启认证,设置账号密码。 …

FPGA无网络芯片实现千兆TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我这里已有的以太网方案网络芯片版本-->千兆网 TCP-->服务器 方案网络芯片版本-->千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案1G/2.5G Ethernet PCS/PMA or SGMII 方案AXI 1G/2.5G Ethernet Subs…

Java内存模型以及多线程并发深度剖析

文章目录 Java内存模型JMM的基本概念缓存一致性与处理器优化happens-before原则总结主内存以及cpu的多级缓存模型的实现原理主内存(Main Memory)CPU多级缓存模型实现原理:多线程并发运行时可能引发的数据不一致问题总线加锁机制和MESI缓存一致性协议的工作原理总线加锁机制M…

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展,大模型技术以其卓越的性能和广泛的应用前景,正在重塑人工智能领域的新格局。然而,任何技术都有两面性,大模型在带来前所未有便利的同时,也引发了深刻的安全和伦理挑战。 大模型&…

vscode安装lean4

本教程演示在Windows系统下如何安装Lean 4正式版。Linux和MacOS版本请参考Lean Manual。 如果你身在中国,在运行安装程序前需要做如下准备: 在系统目录C:\Windows\System32\drivers\etc文件夹下找到hosts文件。对于其它系统用户也都是找到各自系统的host…

vue vue.config.js webpack 加密混淆代码

一、下载加密插件 webpack-obfuscator npm install --save-dev webpack-obfuscatorVue CLI 本身依赖于 Webpack 进行构建和打包。不需要单独安装 Webpack 二、配置vue.config.js const { defineConfig } require(vue/cli-service) const WebpackObfuscator require(webpac…

C#中使用Redis作为缓存系统

在现代软件开发中,缓存是提高应用性能和响应速度的关键技术之一。Redis,作为一种高性能的内存数据存储和缓存数据库,已被广泛应用于各种项目中,特别是在需要频繁数据读取和高速数据处理的场景下。在C#项目中,通过使用R…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类: package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

NEFU算法设计与分析课程设计

(一)动态规划问题 最大子矩阵问题 【题目描述】 有一个包含正数和负数的二维数组。一个子矩阵是指在该二维数据里,任意相邻的下标是1 * 1或更大的子数组。一个子矩阵的和是指该子矩阵中所有元素的和。本题中,把具有最大和的子矩…

Batch学习及应用案例

一、介绍 Batch是一种Windows操作系统中使用的批处理脚本语言,用于自动化执行一系列命令和操作。通过编写批处理脚本,可以实现自动化完成重复性或繁琐的任务,提高工作效率。 Batch脚本可以使用内置的命令和命令行工具,以及调用其…

2024.06.27【读书笔记】|医疗科技创新流程(第1章:需求发现 第一部分)【AI增强版】

第1章:需求发现 (Needs Finding) 1.1 战略聚焦 (Strategic Focus) 战略聚焦是医疗技术创新过程的起点。它要求创新者明确自己的使命、评估自身的强项与弱点,并据此确定项目接受标准。以下是对1.1小节的详细介绍: 定义使命:创新者…

使用飞书多维表格实现推送邮件

一、为什么用飞书? 在当今竞争激烈的商业环境中,选择一款高效、智能的办公工具至关重要。了解飞书的朋友应该都知道,飞书的集成能力是很强大的,能够与各种主流的办公软件无缝衔接,实现数据交互,提升工作效…

【Linux】防火墙命令

文章目录 1. 启动、停止和重启防火墙2. 防火墙状态查询3. 防火墙规则配置4. 防火墙规则查询5. 防火墙其他常用命令 1. 启动、停止和重启防火墙 启动防火墙:systemctl start firewalld停止防火墙:systemctl stop firewalld重启防火墙:systemc…

Gemalto SafeNet Luna HSM服务器硬件监控指标解读

在现代化的信息安全体系中,硬件安全模块(HSM)扮演着至关重要的角色,它负责保护和管理敏感的数据和密钥。Gemalto SafeNet Luna HSM作为一款高性能的硬件安全模块,广泛应用于金融、政府和企业等领域。为了确保Luna HSM的…

竞赛选题 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2,大家可以自行选择下载最新版本 官网:Vditor 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏 …

消息队列选型之 Kafka vs RabbitMQ

在面对众多的消息队列时,我们往往会陷入选择的困境:“消息队列那么多,该怎么选啊?Kafka 和 RabbitMQ 比较好用,用哪个更好呢?”想必大家也曾有过类似的疑问。对此本文将在接下来的内容中以 Kafka 和 Rabbit…