动态规划—编辑距离
leetcode地址:72. 編輯距離
問題描述:
給你兩個單詞?word1 和?word2,請你計算出將?word1?轉換成?word2 所使用的最少操作數?。你可以對一個單詞進行如下三種操作:插入一個字符、刪除一個字符、替換一個字符。比如:word1 = "horse", word2 = "ros",最少需要操作三次:
算法思路:
1. 定義 dp[i][j]
- dp[i][j] 代表 word1 中前 i 個字符,變換到 word2 中前 j 個字符,最短需要操作的次數
- 需要考慮 word1 或 word2 一個字母都沒有,即全增加/刪除的情況,所以預留 dp[0][j] 和 dp[i][0]
2. 狀態轉移
- 增:dp[i][j] = dp[i][j - 1] + 1
- 刪:dp[i][j] = dp[i - 1][j] + 1
- 改:dp[i][j] = dp[i - 1][j - 1] + 1
- 按順序計算,當計算 dp[i][j] 時, dp[i][j - 1] 、dp[i - 1][j] 、dp[i - 1][j - 1] 均已經確定了
- 配合增刪改這三種操作,需要對應的 dp 把操作次數加一,取三種的最小
- 如果剛好這兩個字母相同 word1[i - 1] = word2[j - 1] ,那么可以直接參考 dp[i - 1][j - 1] ,操作不用加一
?
總結
- 上一篇: 动态规划—最小路径和
- 下一篇: 监控工具—Prometheus—基础介绍