LeetCode - 72. Edit Distance

最小编辑距离,动态规划经典题。

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

参考:https://segmentfault.com/a/1190000003741294

import java.util.*;
public class Solution {
    public int minDistance(String word1, String word2) {
        if (word1 == null && word2 == null)
            return 0;
        int len1 = word1.length();
        int len2 = word2.length();
        if (len1 == 0)
            return len2;
        if (len2 == 0)
            return len1;
        int[][] dp = new int[len1+1][len2+1];
        for (int i=0; i<=len1; i++)
            dp[i][0] = i;
        for (int j=0; j<=len2; j++)
            dp[0][j] = j;
        for (int i=1; i<=len1; i++) {
            for (int j=1; j<=len2; j++) {
                int insert = dp[i][j-1] + 1;
                int delete = dp[i-1][j] + 1;
                int replace = dp[i-1][j-1] + (word1.charAt(i-1)==word2.charAt(j-1)?0:1);
                dp[i][j] = Math.min(insert, Math.min(delete, replace));
            }
        }
        return dp[len1][len2];
    }
}

 

posted @ 2016-09-27 22:48  Pickle  阅读(268)  评论(0编辑  收藏  举报