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
}

