兩個字串的編輯距離 動態規劃

2022-02-01 22:24:49 字數 1062 閱讀 5217

字串的編輯距離,又稱為levenshtein距離,由俄羅斯的數學家vladimir levenshtein在2023年提出。是指利用字元操作,把字串a轉換成字串b所需要的最少運算元。其中,字元操作包括:

1、刪除乙個字元

2、插入乙個字元

3、修改乙個字元

3、如果不一樣,那麼必定要經過一次操作(編輯距離+1),比如str1 = "a....." str2="b......",使得兩字串第一位相同,那麼我們不看第一位(回到步驟2)

那麼操作有3種情況

3.1刪掉str1的'a'或給str2加乙個'a',別以為」或「的這兩個操作有什麼不同,經過操作後,剩下給到步驟2的字串是一樣的

3.2刪掉str2的'b'或給str1加乙個'b'

3.3把str1的'b'改成'a'或把str2的'b'改成'a'

剩下就是考慮界限問題了

1、如果str1是「」,那麼編輯距離必然是str2的長度

2、同理,如果str2是「」,那麼編輯距離必然是str1的長度

public static int min(int a, int b, int c)

public static int calcdistance(string str1, string str2)

private static int calc(int index1, int index2, char arr1, char arr2)

if (index2 == arr2.length)

if (arr1[index1] == arr2[index2])

var newindex1 = index1 + 1;

var newindex2 = index2 + 1;

return 1 + min(calc(newindex1, index2, arr1, arr2), calc(index1, newindex2, arr1, arr2),

calc(newindex1, newindex2, arr1, arr2));

}

我也沒看別人的**,就聽說要用動態規劃做,就做了如上思考和**,如有不對,還望指出

兩個字串的最短串編輯距離

假定有兩個字串s1,s2,求出由s1變為s2所需要花費的最小代價。刪除乙個字元的代價為1,增加乙個字元的代價為2,替換乙個字元的代價為2。比如由 abc 變為 abe 你可以刪除c,然後新增e,這樣代價是3 也可以將c替換成e,這樣代價是2,顯然2比較小。具體串編輯問題請參閱演算法書籍。本 運用的是...

動態規劃演算法 計算兩個字串的編輯距離

兩個字串的編輯距離即為兩個字串s1,s2經過插入 刪除和替換操作使得第乙個字串s1與第二個字串s2相同所需的最短操作次數。s1字元個數為m,s2字元個數為n 利用動態規劃的方法,考慮從字串的最後乙個字元開始進行推導,當最後乙個字元相同時,此時問題即為求s1 m 1 與s2 n 1 的編輯距離 而若最...

計算兩個字串的距離

題目描述 對於不同的字串,希望能夠有辦法判斷其相似程度。定義了如下方法來把兩個不同的字串變得相同,具體的操作方法為 1.修改乙個字元 如把 a 替換為 b 2.增加乙個字元 如把 abc 變換為 aabc 3.刪除乙個字元 如把 abc 變換為 bc 比如,對於 abc 和 bc 兩個字串來說,可以...