題目鏈結
昨天的開始遇到了這道題的變種,本質是一樣的,問題是沒有刷到,遺憾。看了題解,據說這道題的面試頻率很高,另外這道題確實很有趣,有必要學習下。
這道題採用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 ...