leetcode -编辑距离

为了求解将 `word1` 转换成 `word2` 所需的最少操作数,可以使用动态规划。以下是详细的解决方案:

方法思路

  1. **定义状态**

`dpij` 表示将 `word1` 的前 `i` 个字符转换成 `word2` 的前 `j` 个字符所需的最少操作数。

  1. **状态转移方程**
  • 如果 `word1i-1 == word2j-1`(字符相同),直接继承前一步的结果:

`dpij = dpi-1j-1`。

  • 如果字符不同,选择以下三种操作中的最小值:

  • **替换**:`dpi-1j-1 + 1`(替换当前字符)。

  • **删除**:`dpi-1j + 1`(删除 `word1` 的第 `i` 个字符)。

  • **插入**:`dpij-1 + 1`(在 `word1` 末尾插入字符以匹配 `word2` 的第 `j` 个字符)。

  1. **初始化**
  • `dpi0 = i`:将 `word1` 的前 `i` 个字符删除为空字符串需要 `i` 次操作。

  • `dp0j = j`:将空字符串插入为 `word2` 的前 `j` 个字符需要 `j` 次操作。

解决代码

```java

import java.util.Scanner;

public class Main {

public static void main(String\[\] args) {

Scanner sc = new Scanner(System.in);

String word1 = sc.nextLine();

String word2 = sc.nextLine();

System.out.println(minDistance(word1, word2));

}

public static int minDistance(String word1, String word2) {

int m = word1.length();

int n = word2.length();

int\[\]\[\] dp = new intm + 1n + 1;

// 初始化边界条件

for (int i = 0; i <= m; i++) {

dpi0 = i; // 删除操作

}

for (int j = 0; j <= n; j++) {

dp0j = j; // 插入操作

}

// 填充dp数组

for (int i = 1; i <= m; i++) {

for (int j = 1; j <= n; j++) {

if (word1.charAt(i - 1) == word2.charAt(j - 1)) {

dpij = dpi - 1j - 1;

} else {

dpij = Math.min(

dpi - 1j - 1, // 替换

Math.min(dpi - 1j, dpij - 1) // 删除或插入

) + 1;

}

}

}

return dpmn;

}

}

```

代码解释

  1. **初始化**

处理边界情况,当其中一个字符串为空时,操作数为另一个字符串的长度。

  1. **动态规划填充**

遍历所有可能的子问题,根据字符是否相同选择直接继承或取三种操作的最小值。

  1. **时间复杂度**

\(O(m \times n)\),其中 \(m\) 和 \(n\) 分别为 `word1` 和 `word2` 的长度。

该方法通过动态规划高效地计算了最小编辑距离,覆盖了所有可能的操作情况。

相关推荐
邪修king2 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料2 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y3 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧8 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头8 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记8 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐9 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵9 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨9 小时前
spring auth 核心流程详解
java·后端·spring
lvwangshu10 小时前
CF1882D Tree XOR 题解
动态规划·题解·贪心·dp·树形dp·换根dp·性质题·思维好题·推导题