func min(a, b int) int {
if a < b {
return a
}
return b
}
func minDistance1(word1 string, word2 string) int {
n := len(word1)
h := len(word2)
dp := make([][]int, n+1)
for i := 0; i <= n; i++ {
dp[i] = make([]int, h+1)
//当word2为空需要删word1的全部元素长度为i
dp[i][0] = i
}
for j := 0; j <= h; j++ {
//同样当word1为空需要删word2的全部元素长度为j
dp[0][j] = j
}
for i := 1; i <= n; i++ {
for j := 1; j <= h; j++ {
if word1[i-1] == word2[j-1] {
//元素相等无需做删减
dp[i][j] = dp[i-1][j-1]
} else {
//当word1、word2字符串元素不相等,即可以删除word1的元素,也可以删除word2的元素,还可以两个数组元素都删除,因为求最少,所以取三者最小值
dp[i][j] = min(dp[i-1][j-1]+2, min(dp[i-1][j]+1, dp[i][j-1]+1))
}
}
}
return dp[n][h]
}
//72. 编辑距离
func minDistance(word1 string, word2 string) int {
n := len(word1)
h := len(word2)
dp := make([][]int, n+1)
for i := 0; i <= n; i++ {
dp[i] = make([]int, h+1)
//当word2为空需要删word1的全部元素长度为i
dp[i][0] = i
}
for j := 0; j <= h; j++ {
//同样当word1为空需要删word2的全部元素长度为j
dp[0][j] = j
}
for i := 1; i <= n; i++ {
for j := 1; j <= h; j++ {
if word1[i-1] == word2[j-1] {
//元素相等无需做删减
dp[i][j] = dp[i-1][j-1]
} else {
//当word1、word2字符串元素不相等,即可以删除或者添加word1的元素,还有替换元素,求最小值
dp[i][j] = min(dp[i-1][j-1]+1, min(dp[i-1][j]+1, dp[i][j-1]+1))
}
}
}
return dp[n][h]
}