golang题解 | 编辑距离(二)

编辑距离(二)

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

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * min edit cost
 * @param str1 string字符串 the string
 * @param str2 string字符串 the string
 * @param ic int整型 insert cost
 * @param dc int整型 delete cost
 * @param rc int整型 replace cost
 * @return int整型
*/
func minEditCost(s string, t string, ic int, dc int, rc int) int {
    n := len(s)
    m := len(t)

    mem := make([][]int, n)
    for i := range mem {
        mem[i] = make([]int, m)
        for j := range mem[i] {
            mem[i][j] = -1
        }
    }

    var dfs func(int, int) int
    dfs = func(i, j int) (ans int) {
        if i < 0 {
            // 下标为 0~j 的字符串长度为 j+1
            return (j + 1) * ic
        }
 
        if j < 0 {
		  // 下标为 0~i 的字符串长度为 i+1
            return (i + 1) * dc
        }
 
        p := &mem[i][j]
        if *p != -1 {
            return *p
        }
 
        defer func(){
            *p = ans
        }()
 
        if s[i] == t[j] {
            return dfs(i - 1, j - 1)
        }
 
        return min(dfs(i, j - 1) + ic, min(dfs(i - 1, j) + dc, dfs(i - 1, j - 1) + rc))
    }
 
    return dfs(n - 1, m - 1)
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}



全部评论

相关推荐

头像
02-26 13:58
门头沟学院 Java
北城_阿亮:把八股背一背,包装一下实习经历项目经历,要是有心思考证就考一考,然后把别人的项目爬到自己github上,包装到简历里,什么三个月?一个月!
点赞 评论 收藏
分享
卡卡罗特w:是这样的,说的太对了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务