import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()){ String str1 = in.nextLine(); String str2 = in.nextLine(); memo = new int[str1.length()+1][str2.length()+1]; for(int[] arr : memo){ Arrays.fill(arr,-1); } char[] chars1 = str1.toCharArray(); char[] chars2 = str2.toCharArray(); System.out.println(levenshtein(chars1,chars1.length,chars2,chars2.length)); } } static int[][] memo; /** * 求chars1[0,i-1] char2[0,j-1]的编辑距离 * @param chars1 * @param i * @param chars2 * @param j * @return */ private static int levenshtein(char[] chars1,int i,char[] chars2,int j){ if(i==0){ return j; } if(j==0){ return i; } if(memo[i][j] != -1){ return memo[i][j]; } //如果一样啥都不用做 if(chars1[i-1] == chars2[j-1]){ memo[i][j] = levenshtein(chars1,i-1,chars2,j-1); }else{ //如果字符不一样,则有增删替换三种操作,编辑距离都是+1 memo[i][j] = min(levenshtein(chars1,i-1,chars2,j) + 1,//删除 levenshtein(chars1,i,chars2,j-1) + 1,//插入 levenshtein(chars1,i-1,chars2,j-1) + 1//替换 ); } return memo[i][j]; } private static int min(int a,int b,int c){ return Math.min(Math.min(a,b),c); } }