跳至主要內容

72. 编辑距离

T4mako算法字符串动态规划小于 1 分钟

72. 编辑距离

中等

题目描述open in new window

解法思路:
使用动态规划,状态转移方程:

dp[i][j]={i,j=0j,i=0min(dp[i1][j1],dp[i1][j],dp[i][j1])+1,word1.charAt(i1)!=word2.charAt(j1)dp[i1][j1],word1.charAt(i1)==word2.charAt(j1) dp[i][j] = \begin{cases} i, & j = 0 \\ j, & i = 0 \\ min(dp[i - 1][j - 1],dp[i - 1][j],dp[i][j - 1]) + 1, & word1.charAt(i - 1) != word2.charAt(j - 1) \\ dp[i - 1][j - 1], & word1.charAt(i - 1) == word2.charAt(j - 1) \end{cases}

class Solution {
    public int minDistance(String word1, String word2) {
        int len1 = word1.length(),len2 = word2.length();
        int[][] dp = new int[len1 + 1][len2 + 1];
        for (int i = 0; i <= len2; i++) {dp[0][i] = i;}
        for (int i = 0; i <= len1; i++) {dp[i][0] = i;}
        for (int i = 1; i <= len1; i++) {
            for (int j = 1; j <= len2; j++) {
                if(word1.charAt(i - 1) == word2.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1];
                else {
                    dp[i][j] = Math.min(dp[i - 1][j - 1],Math.min(dp[i - 1][j],dp[i][j - 1])) + 1;
                }
            }
        }
        return dp[len1][len2];
    }
}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5