【LeetCode笔记】72. 编辑距离(Java、字符串、动态规划)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】72. 编辑距离(Java、字符串、动态规划)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 思路 && 代碼 O(n2n^2n2)、O(n2n^2n2)
- 二刷
打卡第十三天~
題目描述
- 感覺和正則表達式匹配這道題很像:同樣的兩個字符串,同樣的二維數組dp,同樣的hard。。= =
思路 && 代碼 O(n2n^2n2)、O(n2n^2n2)
- 使用動態規劃的做法,同樣多開一行、一列來進行邊界處理。
- dp[i][j]:以[0, i] 和 [0, j]的子串,word1Son轉化成word2Son的最少操作數字
- 具體做法見注釋的 part 和 Case~
- 主要代碼應該是注釋 part 2.2 部分的代碼,可以這么理解:
0. 對于當前 dp[i][j] 的選取值,i、j匹配的情況顯而易見是直接選取dp[i - 1][j - 1]最優 - 不匹配的情況,有三個最優子結構:左邊的dp[i][j - 1],上邊的dp[i - 1][j],以及左上的dp[i -1][j - 1]。經過思考,我們可以發現這三個最優子結構,可以分別通過增、刪、減的方式(操作數 + 1),轉移到 dp[i][j] 的狀態。
- 那么顯而易見,選取三個子結構的最小值,再增加一個操作數就是當前的最優選擇~
二刷
- 一如既往地明了,有效代碼其實就12行
總結
以上是生活随笔為你收集整理的【LeetCode笔记】72. 编辑距离(Java、字符串、动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】剑指 Offer
- 下一篇: 【LeetCode笔记】剑指Offer