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] ; } }