import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return int整型
*/
public int editDistance (String str1, String str2) {
if(str1 == null || str1.length() == 0)
return str2 == null ? 0 : str2.length() ;
if(str2 == null || str2.length() == 0)
return str1 == null ? 0 : str1.length() ;
int len1 = str1.length() ;
int len2 = str2.length() ;
//f[i][j]表示str1的前i个字符转换为str2的前j个字符的最小编辑距离
int[][] f = new int[len1 + 1][len2 + 1] ;
for(int i = 0 ; i <= len1 ; i ++) {
for(int j = 0 ; j <= len2 ; j ++) {
if(i == 0) {
f[i][j] = j ;
} else if(j == 0) {
f[i][j] = i ;
} else {
//f[i][j-1] + 1表示在str1添加了有一个字符;f[i-1][j] + 1表示str1删除了一个字符
f[i][j] = Math.min(f[i][j-1] + 1 , f[i-1][j] + 1) ;
//f[i-1][j-1] + 1表示str1修改了一个字符
f[i][j] = Math.min(f[i][j] , f[i-1][j-1] + 1) ;
//当前字符相等
if(str1.charAt(i-1) == str2.charAt(j-1)) {
//不做改变,直接把问题交给子问题
f[i][j] = Math.min(f[i][j] , f[i-1][j-1]) ;
}
}
}
}
return f[len1][len2] ;
}
}