題目描述:
給定兩個單詞word1和word2,請計算將word1轉換為word2至少需要多少步操作。
你可以對乙個單詞執行以下3種操作:
a)在單詞中插入乙個字元
b)刪除單詞中的乙個字元
c)替換單詞中的乙個字元
解題思路:
f(i,j):word1的前i個字元於word2的前j個字元的編輯距離
狀態遞推:
f(i,j) = min
上式表示從刪除,增加和替換操作中選擇乙個最小運算元
f(i-1,j): w1[1,…,i-1]於w2[1,…,j]的編輯距離,刪除w1[i]的字元—>f(i,j)
f(i,j-1): w1[1,…,i]於w2[1,…,j-1]的編輯距離,增加乙個字元—>f(i,j)
f(i-1,j-1): w1[1,…,i-1]於w2[1,…,j-1]的編輯距離,如果w1[i]與w2[j]相同,
不做任何操作,編輯距離不變,如果w1[i]與w2[j]不同,替換w1[i]的字元為w2[j]—>f(i,j)
初始化:
初始化一定要是確定的值,如果這裡不加入空串,初始值無法確定
f(i,0) = i :word與空串的編輯距離,刪除操作
f(0,i) = i :空串與word的編輯距離,增加操作
返回結果:f(m,n)
public
class
solution
for(
int i =
0; i <= col; i++
)for
(int i =
1; i <= row; i++)}
return mindis[row]
[col];}
}
Edit Distance 編輯距離
編輯距離是一道經典的動態規劃 dynamic programing 問題。下面將詳細地介紹解法。我們先定義一下cache i j 表示,要將word1 0.i 1 轉化成word2 0.j 1 的最小步驟。比如,我們的word1 aeee world2 adef a def aeee 我們先來考慮一...
編輯距離 Edit distance
插入乙個字元,例如 fj fxj 刪除乙個字元,例如 fxj fj 替換乙個字元,例如 jxj fyj 用分治的思想解決比較簡單,將複雜的問題分解成相似的子問題 假設字串 a,共 m 位,從a 1 到a m 字串 b,共 n 位,從b 1 到b n d i j 表示字串a 1 a i 轉換為b 1 ...
編輯距離(Edit Distance)
edit distance 1000 ms 65535 kb 568 2526 設a 和b 是2 個字串。要用最少的字元操作將字串a 轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b 所用的最少字元運算元稱為字串a到b 的編...