難度在於定義最優解的結構。
根據動態規劃思想容易定義出dp[i][j]表示word1的前i段與word2的前j段的編輯距離。
最難想到的是最優解的結構,即替換,刪除和插入三種操作可以分別用dp[i-1][j-1] +1,dp[i-1][j] +1和dp[i][j-1] +1表示。
dp[i][j] 代表 word1 到 i 位置轉換成 word2 到 j 位置需要最少步數
所以,當 word1[i] == word2[j],dp[i][j] = dp[i-1][j-1];
當 word1[i] != word2[j],dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
其中,dp[i-1][j-1] 表示替換操作,dp[i-1][j] 表示刪除操作,dp[i][j-1] 表示插入操作。
/**
* 動態規劃
* 計算編輯距離
*/public int mindistance(string word1, string word2)
for(int j=0;j<=m2;j++)
for(int i=1;i<=m1;i++)else }}
return dp[m1][m2];
}
dp 力扣 72 編輯距離
給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r...
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 ...