Leetcode 72 編輯距離

2022-08-13 00:54:15 字數 1307 閱讀 7063

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

動態規劃

​使用二維dp陣列,dp[i][j]表示把word1[0,i)的子串轉換成word2[0,j]的子串所需要的最小操作。

問題轉化成子問題,比較在word1下標i和word2下標j的兩個字元,如果相等,dp[i][j]=dp[i-1][j-1]

如果不相等,存在三種情況:

1、執行替換操作使其相等。dp [ i ] [j ] = dp [ i - 1 ] [ j - 1 ] + 1

2、如果word1[0..i ) 匹配 word2[0..j - 1)的步驟最少,那麼他們匹配後,word1末尾加上word2最後那個字元。

dp [ i ] [j ] = dp [ i ] [j - 1] + 1

3、如果word1[0..i - 1) 匹配 word2[0..j)的步驟最少,那麼他們匹配後,word1末尾刪乙個字元。

dp [ i ] [ j ] = dp[ i - 1 ] [ j ] + 1

取這三種情況的最小值

初始化:空字串匹配,dp[i][0] = idp[0][j] = j

class solution 

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

for (int i=1;i<=l1;i++)

}return dp[l1][l2];

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

}

Leetcode 72 編輯距離

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

leetcode 72 編輯距離

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

LeetCode72 編輯距離

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