LeetCode

题目:

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

思路:

动态规划,dp(i,j)指(i-1)和(j-1)位置需要多少次变换才能相等,若word1[i-1]==word2[j-1],那么dp(i,j)=dp(i-1,j-1),否则的话,则是从dp(i-1,j-1),dp(i,j-1),dp(i-1,j)中选择一个最小值,然后再加1.

package dp;

public class EditDistance {

    public int minDistance(String word1, String word2) {
        int m = word1.length();
        int n = word2.length();
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 0 ;i <= m ; ++i)
            dp[i][0] = i;
        for (int i = 0; i <= n; ++i)
            dp[0][i] = i;
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (word1.charAt(i - 1) == word2.charAt(j - 1)) { 
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = 1 + Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]);
                }
            }
        }
        
        return dp[m][n];
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EditDistance e = new EditDistance();
        System.out.println(e.minDistance("a", "b"));
        System.out.println(e.minDistance("abc", "bc"));
        System.out.println(e.minDistance("abc", "def"));
        System.out.println(e.minDistance("abcdefg", "bcdefgh"));
        System.out.println(e.minDistance("abc", "cba"));
        
    }

}
原文地址:https://www.cnblogs.com/null00/p/5091896.html