計算兩個字串的距離演算法

2022-08-18 04:33:12 字數 941 閱讀 3239

題目的描述為:將乙個字串變成另乙個字串,方式為新增乙個字元,刪除乙個字元,替換乙個字元,求這些操作的做小次數,例如字串db adcb 兩個字串,通過新增a和c兩個字元獎db編輯成adcb,這個兩個字串的距離為2

思路:定義乙個二維代價陣列dp[n][m],設新增乙個字元的代價為 ic(inseret cost),刪除乙個字元的代價為dc(delect cost),替換乙個字元的代價為rc(replace cost) dp[n][m]為下列三種情況中的最小值

1,dp[x][y] = dp[x][y-1]+ic

表示 已知 a字串中前x個字元表示b中前y-1個字元的代價已知,求a中前x個字元表示b中前y個字元的代價為dp[x][y-1]+ic;

2,dp[x][y]=dp[x-1][y]+dc;

表示已知a中前x-1個字元表示b中前y個字元的代價,則使用a中前x個字元表示b中前y個字元的代價為dp[x-1][y]+dc;

3,dp[x][y]=dp[x-1][y-1];

表示已知a中前x-1個字元表示b中前y-1個字元代價dp[x-1][y-1],當a中的第x字元等於b中第y個字元的時候,則a中前x個字元表示b中前y個字元的代價為dp[x-1][y-1]

4,dp[x][y]=dp[x-1][y-1]+rc

表示已知a中前x-1個字元表時b中前y-1個字元的代價為dp[x-1][y-1],當a中的第x個字元不等於b中第y個字元時,a中前x個字元表示b中的前y個字元的代價為dp[x-1][y-1]+rc;

**如下:

public class demo else

dp[x][y]=math.min(c1, c2);

dp[x][y]=math.min(dp[x][y], c3);}}

return dp[n][m];

}public static void main(string args)}}

參考連線:

計算兩個字串的距離

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

求兩個字串的距離

給定兩個長度相等的,由小寫字母組成的字串s1和s2,定義s1和s2的距離為兩個字串有多少個位置上的字母不相等。現在牛牛可以選定兩個字母x1和x2,將s1中的所有字母x1均替換成x2。x1和x2可以相同 牛牛希望知道執行一次替換之後,兩個字串的距離最少為多少。x1和x2是自己求的,未知 輸入 aaa ...

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

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