题解 | #最小编辑代价 Go#
最小编辑代价
http://www.nowcoder.com/practice/05fed41805ae4394ab6607d0d745c8e4
func minEditCost( s1 string , s2 string , ic int , dc int , rc int ) int {
m,n := len(s1),len(s2)
// dp[i][j] 表示a字符串的前i个字符编辑为b字符串的前j个字符最少需要多少次操作
dp := make([][]int,m+1)
for i := 0 ; i <= m ; i++ {
dp[i] = make([]int,n+1)
}
// s2一个字母都没有的情况
for i := 0 ; i <= m ; i++ {
dp[i][0] = i * dc
}
// s1一个字母都没有的情况
for j := 0 ; j <= n ; j++ {
dp[0][j] = j * ic
}
for i := 1 ; i <= m ; i++ {
for j := 1 ; j <= n ; j++ {
// 相等则不需要操作
if s1[i-1] == s2[j-1] {
dp[i][j] = dp[i-1][j-1]
} else {
dp[i][j] = min(dp[i][j-1]+ic,dp[i-1][j]+dc,dp[i-1][j-1]+rc) // 否则取删除、插入、替换最小操作次数的值
}
}
}
return dp[m][n]
}
func min(val ...int) (res int) {
res = val[0]
for i := 1; i < len(val); i++ {
if val[i] < res {
res = val[i]
}
}
return
}