题解 | #最小编辑代价 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
}
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务