今天再给大家带来一道lc上的题的学习心得。
编辑距离
给你两个单词 word1
和 word2
, 请返回将 word1
转换成 word2
所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')
题目解析:
func minDistance(s1 string, s2 string) int {
n,m := len(s1),len(s2)
dp := make([][]int,n+1)
for i := 0;i <= n;i++{
dp[i] = make([]int,m+1)
}
// 先初始化行和列
for i := 1;i <= n;i++{
dp[i][0] = dp[i-1][0] + 1
}
for i := 1;i <= m;i++{
dp[0][i] = dp[0][i-1] + 1
}
// 状态转移
for i := 1;i <= n;i++{
for j := 1;j <= m;j++{
if s1[i-1] == s2[j-1]{
dp[i][j] = dp[i-1][j-1]
}else{
dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1])) + 1
}
}
}
return dp[n][m]
}
func min(x,y int)int{
if x <= y{
return x
}
return y
}