你總共三種操作方法:
返回 3 思路
使用dp, 先定義狀態 f(i)(j) 單詞1 的前i個 跟 單詞2 的前j個 的最短編輯距離。如果 a[i] == b[j] , 那麼f(i,j) = f(i-1,j-1)。
然後,再看有三種狀態:
1. 增加乙個 : 等價於 f(i, j-1)
2. 刪除乙個 : 等價於 f(i-1, j)
3. 修改乙個 : 等價於 f(i-1, j-1)
那麼狀態轉移方程就很顯而易見了吧:
if a[i] == b[j] , f (i, j) = f(i-1,j-1) ,
else f (i, j) = min( f(i ,j-1) , f(i-1,j-1) ,f(i-1,j) ) + 1.
**:
public int mindistance(string word1, string word2)
for (int j = 0; j <= word2.length(); j++)
for (int i = 1; i <= word1.length() ; i++) else }}
return dp[word1.length()][word2.length()];
}
lintcode練習 119 編輯距離
給出兩個單詞word1和word2,計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 給出 work1 mart 和 work2 karma 返回 3 當i 0時,dp 0,j j,j 0.len word2 表示word2需要刪除j位來使其與word1相同為空 同理當j 0,...
Lintcode 008 編輯距離)
2016 08 29 給出兩個單詞word1和word2,計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 樣例 給出 work1 mart 和 work2 karma 返回 3 標籤 動態規劃 解題 此題為典型的動態規劃問題,可以按照一般解題思路解決。首先定義這樣乙個函式 e...
lintcode 640 一次編輯距離
在s的任意位置插入乙個字元 刪除s中的任意乙個字元 將s中的任意字元替換成其他字元 樣例例1 輸入 s adb t adb 輸出 true例2 輸入 s ab t ab 輸出 false 解釋 s t 所以他們不相差一次編輯的距離class solution if flag 1 return fal...