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