package com.interview.books.leetcodeoj; /** * Created_By: stefanie * Date: 14-12-23 * Time: 下午2:38 */ public class LOJ72_EditDistance { //state: distance[i][j]: the min edit distance of a.substring(0, i) and b.substring(0, j); //initialize: distance[i][0] = i and distance[0][j] = j //function: distance[i][j] = distance[i-1][j-1] if a.charAt(i - 1) == b.charAt(j - 1) // distance[i][j] = min(distance[i-1][j-1], distance[i-1][j], distance[i][j-1]) + 1, // if a.charAt(i - 1) != b.charAt(j - 1) //result: distance[a.length][b.length]; public int minDistance(String a, String b) { int[][] distance = new int[a.length() + 1][b.length() + 1]; for(int i = 0; i <= a.length(); i++) distance[i][0] = i; for(int j = 0; j <= b.length(); j++) distance[0][j] = j; for(int i = 1; i <= a.length(); i++){ for(int j = 1; j <= b.length(); j++){ if(a.charAt(i - 1) == b.charAt(j - 1)) distance[i][j] = distance[i-1][j-1]; else { distance[i][j] = Math.min(distance[i-1][j], distance[i][j-1]); distance[i][j] = Math.min(distance[i][j], distance[i-1][j-1]); distance[i][j] += 1; } } } return distance[a.length()][b.length()]; } }