LeetCode 72 編輯距離

2021-10-04 17:23:11 字數 1232 閱讀 6806

題目鏈結

昨天的開始遇到了這道題的變種,本質是一樣的,問題是沒有刷到,遺憾。看了題解,據說這道題的面試頻率很高,另外這道題確實很有趣,有必要學習下。

這道題採用dp的思想,dp記錄的是:從word1的[0,i]段轉換到word2的][0,j]段,所使用的最少運算元。換句話說,經過dp[i][j]次操作word1和word2相同了。

首先,需要進行初始化的操作。

1.將長度為i的word1轉換成空字串需要i次刪除操作,有:dp[i][0] = i;

2.將空字串轉換為長度為j的word2需要j次插入操作,有:dp[0][j] = j。

對於每乙個dp[i][j],有以下幾種情況:

1.當前位置兩字串的字元相等:dp[i][j] = dp[i - 1][j - 1]

2.當前位置兩字串的字元不等:

word1插入乙個字元:dp[i][j] = dp[i][j - 1] + 1;

word1刪除乙個字元:dp[i][j] = dp[i - 1][j] + 1;

word1替換乙個字元:dp[i][j] = dp[i - 1][j - 1] + 1;

最後,返回dp[length1][length2]。

class

solution

//dp[0][i]表示:長度為0的word1轉換到word2的[0,j]段,所使用的最少運算元(即需要在word1中插入j個字元)

for(

int j =

1; j <= length2; j++

)//具體操作

/* 1.當前位置兩字串的字元相等:dp[i][j] = dp[i - 1][j - 1]

2.當前位置兩字串的字元不等:

word1插入乙個字元:dp[i][j] = dp[i][j - 1] + 1;

word1刪除乙個字元:dp[i][j] = dp[i - 1][j] + 1;

word1替換乙個字元:dp[i][j] = dp[i - 1][j - 1] + 1;

*/for(

int i =

1; i <= length1; i++

)else}}

return dp[length1]

[length2];}

}

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 ...