题解 | #最小编辑代价#

最小编辑代价

http://www.nowcoder.com/practice/05fed41805ae4394ab6607d0d745c8e4

我看大家都写的是迭代版本的,那我来写个递归版本的吧,思路一致,代码如下:
class Solution {
public int minEditCost (String str1, String str2, int ic, int dc, int rc) {
// write code here
int[][] dp = new int[str1.length() + 1][str2.length() + 1];
for (int i = 0; i < dp.length; i++) {
for (int j = 0; j < dp[0].length; j++) {
dp[i][j]=-1;
}
}
int i=str1.length()-1;
int j=str2.length()-1;
int back = back(str1, str2, ic, dc, rc, i, j, dp);
return back;
}

public int back(String str1, String str2, int ic, int dc, int rc,int i,int j,int[][] dp){
    if (i==-1){
        return (j+1)*ic;
    }
    if (j==-1){
        return (i+1)*dc;
    }

   //备忘录:
    if (dp[i+1][j+1]!=-1){
        return dp[i+1][j+1];
    }

    int back;
    if (str1.charAt(i) == str2.charAt(j)) {
        back = back(str1, str2, ic, dc, rc, i - 1, j - 1, dp);
    } else {
        int a = back(str1, str2, ic, dc, rc, i - 1, j, dp) + dc;
        int b = back(str1, str2, ic, dc, rc, i, j - 1, dp) + ic;
        int c = back(str1, str2, ic, dc, rc, i - 1, j - 1, dp) + rc;
        back = getMin(a, b, c);
    }

   //存备忘录
    dp[i+1][j+1] = back;
    return back;
}


public int getMin(int a,int b,int c){
    return Math.min(Math.min(a,b),c);
}

}

全部评论

相关推荐

02-05 08:49
已编辑
武汉大学 Web前端
野猪不是猪🐗:36k和36k之间亦有差距,ms的36k和pdd的36k不是一个概念
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务