leetcode 72. 编辑距离
动态规划解法
func minDistance(word1 string, word2 string) int {
m, n := len(word1), len(word2)
// dp[i][j] 代表 word1前i个字符->word2前j个字符最少需要几步
dp := make([][]int, m+1)
// 初始化
for i :=0;i<m+1;i++{
dp[i] = make([]int, n+1)
// word1前i个字符变为word2前0个字符,需要i步,即i次删除
dp[i][0] = i
}
for j :=0;j<n+1;j++{
dp[0][j] = j
}
for i := 1; i < m+1; i++ {
for j := 1; j < n+1; j++ {
// 该位置无需改动
if word1[i-1] == word2[j-1] {
dp[i][j] = dp[i-1][j-1]
} else {
// 该位置要增删改
dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1])
}
}
}
return dp[m][n]
}
func min(x int, list ...int) int {
for _, v := range list {
if v < x {
x = v
}
}
return x
}