题解 | #牛群编号变更# java
牛群编号变更
https://www.nowcoder.com/practice/9295f0f796b34793832710d5c939a619
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param word1 string字符串
* @param word2 string字符串
* @return int整型
*/
// write code here
public int minDistance(String word1, String word2) {
int n = word1.length();
int m = word2.length();
int[][] f = new int[n + 1][m + 1];
// 初始化第一行和第一列
for (int i = 0; i <= n; ++i) {
f[i][0] = i;
}
for (int j = 0; j <= m; ++j) {
f[0][j] = j;
}
// 动态规划计算最小操作次数
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
f[i][j] = Math.min(f[i][j - 1], f[i - 1][j]) + 1;
if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
f[i][j] = Math.min(f[i][j], f[i - 1][j - 1]);
}
}
}
return f[n][m];
}
}
该代码使用的编程语言是Java。
代码考察的知识点包括动态规划和字符串操作。
代码的文字解释大纲如下:
- 代码的目标:计算将字符串
word1转换为word2所需的最小操作次数(编辑距离)。 - 输入参数:
word1和word2分别表示两个字符串。 - 返回值:整型,表示最小操作次数。
- 首先,获取字符串
word1和word2的长度n和m。 - 创建一个二维整型数组
f,大小为(n+1)×(m+1),用于记录子问题的结果。 - 初始化第一行和第一列,即将空字符串转换为
word1和word2所需的最小操作次数。 - 使用两层循环遍历所有可能的转换情况。
- 在每个位置
(i, j)上,计算当前位置所需的最小操作次数。 - 假设当前位置对应的
word1和word2的索引分别为i-1和j-1。 - 判断当前位置的字符是否相等,如果相等,则不需要进行操作,结果与前一个位置相同,即
f[i][j] = f[i-1][j-1]。 - 如果当前位置的字符不相等,则需要进行插入、删除或替换操作,取三种操作中的最小次数并加一,即
f[i][j] = min(f[i][j-1], f[i-1][j], f[i-1][j-1]) + 1。 - 循环结束后,返回
f[n][m]的值作为最终结果,表示将字符串word1转换为word2所需的最小操作次数。
SHEIN希音公司福利 370人发布