leetCode DP 72 編輯距離

2021-10-01 14:56:10 字數 2432 閱讀 8453

給定兩個單詞 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')

依然按照步驟來:

1).定義乙個能夠清楚描述最優子問題的陣列(明確陣列描述的含義)。

2).找出陣列元素之間的關係式(狀態轉移方程)

3).找出初始值

1).dp[i][j] 代表第乙個單詞的第i個字元變換到第二個單詞的第j個字元需要最少的步驟

2).狀態轉移方程 :

當兩個字串中的某個字元相等時既 char1[i] == char2[j] dp[i][j] = dp[i-1][j-1]

否則,需要通過新增、修改、刪除等操作轉換 dp[i][j] =  min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1 

3)初始化

for(int i = 0;i <= row;i++)

dp[i][0] = i;

for(int i = 0;i <= col;i++)

dp[0][i] = i;

code:

public static int mindistance(string word1, string word2) 

if (col == 0)

int dp = new int[row + 2][col + 2]; //當字串 word1 的長度為 i,字串 word2 的長度為 j 時,將 word1 轉化為 word2 所使用的最少操作次數為 dp[i] [j]。

for(int i = 0;i <= row;i++)

dp[i][0] = i;

for(int i = 0;i <= col;i++)

dp[0][i] = i;

for(int i = 1;i <= row;i++) else }}

for(int i = 0;i <= row ;i++)

system.out.println();

}return dp[row][col];

}

同我們之前做的dp類似,在求解的時候發現並不需要儲存整個矩陣的狀態,只需要儲存當前行對應的列即可。但是不同之處在於在當前位置dp[i][j]的左上角還有乙個狀態,為了同時儲存左上角的狀態 解決的辦法是使用兩個變數temppre儲存,在更新之前,使用temp儲存dp[j],然後dp[j]要被更新,然後將dp[j]賦值給pre,下次遞推的時候,左上角的值就是pre

}題目:給定兩個字串str1和str2,再給定三個整數ic、dc和rc,分別代表插入、刪除和替換乙個字元的代價,返回將str1編輯成str2的最小代價。

這個問題是上面問題的加強版,不同的地方在於這裡三個編輯的代價不同,所以我們要更加的清楚是哪個編輯的更新:

code:

class solution 

}return dp[chs1.length][chs2.length];

}public int min(int a, int b, int c)

}

reference :

動態規劃之LeetCode第72題 編輯距離

首先先學習乙個經典的演算法吧,就是和本題一模一樣的 編輯距離演算法 編輯距離,minimum edit distance,簡稱med,是俄羅斯科學家 vladimir levenshtein 在1965年提出,也因此而得名 levenshtein distance。用來度量兩個序列相似程度的指標。通...

72 編輯距離

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

72 編輯距離

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