class Solution {
public int minDistance(String word1, String word2) {
//动态规划:dp[i][j]表示word1中前i个字符串和word2中前j个字符串的编辑距离
int len1 = word1.length();
int len2 = word2.length();
if(len1*len2 == 0){//一方为0输出另一方的长度就是编辑距离
return len1 + len2;
}
int[][] dp = new int[len1+1][len2+1];
for(int i=0;i<=len1;i++){//初始化边界
dp[i][0] = i;
}
for(int i=0;i<=len2;i++){
dp[0][i] = i;
}
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
int left = dp[i+1][j];
int down = dp[i][j+1];
int left_down = dp[i][j];
if(word1.charAt(i) == word2.charAt(j)){
dp[i+1][j+1] = 1+Math.min(left,Math.min(down,left_down-1));
}else{
dp[i+1][j+1] = 1+Math.min(left,Math.min(down,left_down));
}
}
}
return dp[len1][len2];
}
}
leetcode72 字符串的编辑距离(难题)
最新推荐文章于 2022-04-01 01:25:05 发布