class Solution {
public int minDistance(String word1, String word2) {
int n1 = word1.length();
int n2 = word2.length();
//当有空串时
if(n1 == 0 && n2 == 0) return 0;
if(n1 == 0) return n2;
if(n2 == 0) return n1;
int[][] dp = new int [n1 + 1][n2 + 1];
//设置初始状态
for(int i = 1; i <= n1; i++){
dp[i][0] = i;
}
for(int i = 1; i <= n2; i++){
dp[0][i] = i;
}
for(int i = 1; i <= n1; i++){
for(int j = 1; j <= n2; j++){
//在i位置加与j位置相同的元素
int res1 = dp[i - 1][j] + 1;
//在j位置加与i位置相同的元素
int res2 = dp[i][j - 1] + 1;
int res3;
//i位置和j位置相同,不用变换
if(word1.charAt(i - 1) == word2.charAt(j - 1)){
res3 = dp[i - 1][j - 1];
}
//不同时需要变换
else{
res3 = dp[i - 1][j - 1] + 1;
}
dp[i][j] = Math.min(res1, Math.min(res2, res3));
}
}
return dp[n1][n2];
}
}
leetcode 72.编辑距离 (动态规划)
于 2023-03-20 14:41:18 首次发布