演算法題目 編輯距離 動態規劃天花板級別題目

2021-10-25 17:19:15 字數 1494 閱讀 6445

題目描述:

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 。

你可以對乙個單詞進行如下三種操作:

插入乙個字元

刪除乙個字元

替換乙個字元

示例 1:

輸入:word1 = 「horse」, word2 = 「ros」

輸出:3

解釋:horse -> rorse (將 『h』 替換為 『r』)

rorse -> rose (刪除 『r』)

rose -> ros (刪除 『e』)

示例 2:

輸入:word1 = 「intention」, word2 = 「execution」

輸出:5

解釋:intention -> inention (刪除 『t』)

inention -> enention (將 『i』 替換為 『e』)

enention -> exention (將 『n』 替換為 『x』)

exention -> exection (將 『n』 替換為 『c』)

exection -> execution (插入 『u』)

題目解析:

不難總結出:對於每乙個狀態而言,f(i , j)=min( 替,插、刪)

替:f(i ,j)=f[i - 1][ j -1]+1 必須滿足二者不相等,否則無需替換

插:f(i ,j)=f[ i ] [ j - 1 ]+1

刪:f(i ,j)=f[ i - 1][ j ]+1

接下來,按照動態規劃步驟從頭分析一遍

確定問題。求最小次數f(i,j)

舉例分析,如上圖中例子

拆分問題。對於每乙個字元所在的位置而言,等於從前的某一步+1

動態轉移方程:f(i,j)=min(插,刪,替)

替:f(i ,j)=f[i - 1][ j -1]+1 必須滿足二者不相等,否則無需替換

插:f(i ,j)=f[ i ] [ j - 1 ]+1

刪:f(i ,j)=f[ i - 1][ j ]+1

初始狀態:空字元到某乙個字元使用插,次數為長度;某乙個字元到空字元使用刪,次數為長度

記錄法儲存每乙個狀態。需要二維陣列,橫座標每一位代表源字元,縱座標每一位代表目標字元

int

mindistance

(string word1, string word2)

for(

int i=

0;i1;i++

)//開始記錄

for(

int i=

1;i1;i++)}

return dp[len1]

[len2]

;}

演算法 編輯距離 動態規劃

1.解題思路 這道題是典型的動態規劃的題,也是比較簡單的動態規劃的題,在這裡記錄一下,一是要求自己不要鬆懈,二是彌補自己在動態規劃上的不足。我們在這道題上,處理每乙個字元無非就是3種操作,增加字元 刪除字元 替換字元。首先,我們定義乙個dp word1.length 1 word2.length 1...

演算法 最小編輯距離 動態規劃

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為 r ...

動態規劃 編輯距離

1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...