算法打卡:第九章 动态规划part12

server/2024/9/22 13:21:08/

今日收获:不同的子序列,两个字符串的删除操作,编辑距离

1. 不同的子序列

题目链接:115. 不同的子序列 - 力扣(LeetCode)

思路:

(1)dp数组表示两个字符串 i-1,j-1位置之前的相同子序列个数。

(2)初始化:如果s不为空串,t为空串,那么dp数组值为1;反之dp数组值全为0

(3)遍历顺序:当前位置的值取决于左上角元素和上方元素,所以是从上到下从左到右遍历

(4)递推公式:如果当前位置的字符相等,那么值就等于两个字符串都向前移一位的值+大字符串向前移一位的值;如果不相等,当前位置的值大字符串向前移一位的值,看看s中前面的字符匹配了多少个t

方法:

java">class Solution {public int numDistinct(String s, String t) {int len1=s.length();int len2=t.length();int[][] dp=new int[len1+1][len2+1];// 初始化,字符串中有一个空串for (int i=0;i<len1+1;i++){dp[i][0]=1;}for (int j=1;j<len2+1;j++){  // 空字符串中没有tdp[0][j]=0;}for(int i=1;i<=len1;i++){for (int j=1;j<=len2;j++){if (s.charAt(i-1)==t.charAt(j-1)){dp[i][j]=dp[i-1][j-1]+dp[i-1][j];}else {dp[i][j]=dp[i-1][j];}}}return dp[len1][len2];}
}

2. 两个字符串的删除操作

题目链接:583. 两个字符串的删除操作 - 力扣(LeetCode)

思路:两个单词都可以删除。如果两个单词当前位置的字符不相等,一共有三种删除情况取最小值。

方法:

java">class Solution {public int minDistance(String word1, String word2) {int len1=word1.length();int len2=word2.length();int[][] dp=new int[len1+1][len2+1];// 初始化dp[0][0]=0;for (int i=1;i<len1+1;i++){dp[i][0]=i;}for (int j=1;j<len2+1;j++){dp[0][j]=j;}for (int i=1;i<len1+1;i++){for (int j=1;j<len2+1;j++){if (word1.charAt(i-1)==word2.charAt(j-1)){dp[i][j]=dp[i-1][j-1];}else {dp[i][j]=Math.min(Math.min(dp[i][j-1]+1,dp[i-1][j]+1),dp[i-1][j-1]+2);}}}return dp[len1][len2];}
}

3. 编辑距离

题目链接:72. 编辑距离 - 力扣(LeetCode)

思路:当字符串不匹配时,dp[i-1][j]+1,dp[i][j-1]+1代表分别对两个字符串进行删除(增加)的操作;dp[i-1][j-1]+1表示替换操作。

方法:

java">class Solution {public int minDistance(String word1, String word2) {int len1=word1.length();int len2=word2.length();int[][] dp=new int[len1+1][len2+1];// 初始化for (int i=0;i<len1+1;i++){dp[i][0]=i;}for (int j=1;j<len2+1;j++){dp[0][j]=j;}for (int i=1;i<len1+1;i++){for (int j=1;j<len2+1;j++){if (word1.charAt(i-1)==word2.charAt(j-1)){dp[i][j]=dp[i-1][j-1];}else {dp[i][j]=Math.min(Math.min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);}}}return dp[len1][len2];}
}

http://www.ppmy.cn/server/118406.html

相关文章

Linux审计系统软件auditd简介

Linux审计系统软件auditd是一个强大的工具&#xff0c;用于监控和记录安全相关的信息。它最初是基于Linux 2.6.11.12版本内核开发的&#xff0c;主要的审计机制代码位于kernel/audit.c和kernel/auditsc.c中[^4]。auditd可以记录系统调用和文件访问等事件&#xff0c;帮助系统管…

TCP协议分析《实验报告》

一、实验目的 1、理解TCP协议&#xff1b; 2、掌握TCP协议三次握手建立连接和四次挥手释放连接的过程&#xff1b; 3、理解TELNET协议及工作过程&#xff1b; 4、掌握TCP协议分析方法。 二、实验设备和环境 1、硬件设备&#xff1a;PC机或笔记本电脑&#xff1b; 2、软件…

学成在线练习(HTML+CSS)

准备工作 项目目录 内部包含当前网站的所有素材&#xff0c;包含 HTML、CSS、图片、JavaScript等等 1.由于元素具有一些默认样式&#xff0c;可能是我们写网页过程中根本不需要的&#xff0c;所有我们可以在写代码之前就将其清除 base.css /* 基础公共样式&#xff1a;清除…

UE5中使用UTexture2D进行纹理绘制

在UE中有时需要在CPU阶段操作像素&#xff0c;生成纹理贴图等&#xff0c;此时可以通过UTexture2D来进行处理&#xff0c;例子如下&#xff1a; 1.CPP部分 首先创建一个蓝图函数库&#xff0c;将UTexture2D的绘制逻辑封装成单个函数&#xff1a; .h&#xff1a; #include &…

[项目][WebServer][构建响应 发送响应]详细讲解

目录 1.构建响应2.发送响应 1.构建响应 构建响应流程如下 确认方法根据不同方法&#xff0c;以不同方法提参确认访问资源 如果用户的URL没有指明要访问的某种资源(路径)&#xff0c;虽然浏览器默认会添加/&#xff0c;但是依旧没有告知服务器&#xff0c;要访问什么资源 此时&…

Ubuntu 22.04 LTS 上安装 Docker

单台机器安装docker环境&#xff0c;是为了后面安装open-webui&#xff0c;环境安装比较简单&#xff0c;没有难点&#xff0c;但一定要按步骤走&#xff0c;否则还是会遇到一些问题的。 第 1 步&#xff1a;更新软件包并安装必要软件 运行以下命令&#xff0c;更新软件包索引…

基于SpringBoot+Vue+MySQL的画师约稿平台系统

系统展示 用户界面 画师界面 管理员界面 系统背景 基于SpringBootVueMySQL的画师约稿平台系统的背景&#xff0c;主要源于数字艺术行业的快速发展与画师、客户双方需求的日益增长。在传统的约稿方式中&#xff0c;往往存在沟通效率低下、交易过程不透明等问题&#xff0c;这限制…

maven打包插件

非Springboot项目打包&#xff0c;将自己的程序和依赖打成一个jar包 前言 即使在pom.xml文件中没有配置任何plugin&#xff0c;maven也会默认设置一些插件&#xff0c;如其中的maven-jar-plugin插件 执行 package 打包时&#xff0c;maven 会使用maven-jar-plugin插件打包&am…