LeetCode:583.两个字符串的删除操作

news/2025/2/8 5:05:59/

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录

LeetCode:583.两个字符串的删除操作
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。
每步 可以删除任意一个字符串中的一个字符。
示例 1:
输入: word1 = “sea”, word2 = “eat”
输出: 2
解释: 第一步将 “sea” 变为 “ea” ,第二步将 "eat "变为 “ea”
示例 2:
输入:word1 = “leetcode”, word2 = “etco”
输出:4

解法一:

  • dp[i][j] 表示word1[0]到word1[1]所表示的字符串 和 word2[0]到word2[1]所表示的字符串相同所需呀删除的最小步数
  • 初始化:dp[i][0] = idp[0][j] = j,即一个为空,另一个不为空,如果想要相同则需要全部是删除
  • 递推公式:如果两个字符相同,则不需要删除的,因为我们求的是最小的步数,所以有:word1.charAt(i - 1) == word2.charAt(j - 1);如果两个字符不同,则要么删除word1里面的,要么删除word2里面的,则有:dp[i][j] = Math.min(dp[i - 1][j - 1] + 2,Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1))
java">	public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i < word1.length() + 1; i++)dp[i][0] = i;for (int j = 0; j < word2.length() + 1; j++)dp[0][j] = j;for (int i = 1; i < word1.length() + 1; i++) {for (int j = 1; j < word2.length() + 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(dp[i - 1][j - 1] + 2,Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));}}}return dp[word1.length()][word2.length()];}

解法二:

  • 类似最长公共子序列,只要求得最长公共子序列的长度,既可以得知需要删除的步骤了:len1 + len2 - 2 * 最长公共子序列的长度
java">	public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {if (word1.charAt(i - 1) == word2.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 word1.length() + word2.length() - 2 * dp[word1.length()][word2.length()];}

http://www.ppmy.cn/news/1570243.html

相关文章

2025年02月05日Github流行趋势

项目名称&#xff1a;OCRmyPDF 项目地址url&#xff1a;https://github.com/ocrmypdf/OCRmyPDF项目语言&#xff1a;Python历史star数&#xff1a;15872今日star数&#xff1a;157项目维护者&#xff1a;jbarlow83, fritz-hh, apps/dependabot, mawi12345, mara004项目简介&…

AI驱动的智能流程自动化是什么

在当今快速发展的数字化时代&#xff0c;企业正在寻找更高效、更智能的方式来管理日常运营和复杂任务。其中&#xff0c;“AI驱动的智能流程自动化”&#xff08;Intelligent Process Automation, IPA&#xff09;成为了一个热门趋势。通过结合人工智能&#xff08;AI&#xff…

M系列/Mac安装配置Node.js全栈开发环境(nvm+npm+yarn)

一、安装 nvm&#xff08;Node Version Manager&#xff09; 打开终端&#xff0c;使用 curl 在 M 系列 Mac 上安装 nvm&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash对于非 M 系列的 Intel Mac&#xff0c;上述命令同样适…

测试驱动开发(TDD)实践:从理论到实践

测试驱动开发&#xff08;Test-Driven Development&#xff0c;简称TDD&#xff09;是一种软件开发方法&#xff0c;其核心理念是“先写测试&#xff0c;再写代码”。与传统的开发方式不同&#xff0c;TDD并非开发完成后再进行测试&#xff0c;而是将测试置于开发的前沿&#x…

.net framework 4.5 的项目,用Mono 部署在linux

步骤 1&#xff1a;安装 Mono 更新包列表&#xff1a; 首先&#xff0c;更新 Ubuntu 的包列表以确保获取最新的软件包信息。 sudo apt update 安装 Mono&#xff1a; 安装 Mono 完整版&#xff08;mono-complete&#xff09;&#xff0c;它包含了运行 .NET 应用程序所需的所有…

Java 开发面试全解析:15 个关键问题深度剖析

在竞争激烈的 Java 开发领域&#xff0c; Java 开发工程师需要具备扎实的专业知识、丰富的实践经验和卓越的问题解决能力。以下为你精心准备了 15 个Java 开发工程师面试题及详细答案&#xff0c;助你在面试中脱颖而出。 1. 请详细阐述 Java 中的多线程同步机制 在 Java 里&a…

(2025,LVLM,高分辨率图像处理,子图划分,全局语义引导注意力权重分配)

Global Semantic-Guided Sub-image Feature Weight Allocation in High-Resolution Large Vision-Language Models 目录 1. 引言 2. 本文贡献 3. 方法 3.1 现有高分辨率图像处理方法 3.2 全局语义引导权重分配&#xff08;GSWA&#xff09; 4. 实验结果 4.1 通用基准测试…

可以在个人电脑上部署的主流开源大模型

目前主流开源的大模型发展迅速&#xff0c;许多模型经过优化后可以在个人电脑&#xff08;甚至CPU或消费级GPU&#xff09;上运行。以下是当前主流的开源大模型及其在个人设备上的部署可行性总结&#xff1a; 一、主流开源大模型 1.DeepSeek系列 DeepSeek大语言模型算法&#…