字串編輯距離

2021-07-27 04:55:16 字數 1544 閱讀 5798

題目描述:

給定乙個源串和目標串,能夠對源串進行如下操作:

在給定位置上插入乙個字元

替換任意字元

刪除任意字元

寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於2000。

關於字串最短編輯距離的解題思路:

給定相關資料的定義:mep[i][j]表示源字串source[0..i]到目標字串target[0...j]的編輯距離,

為了能夠使用動態規劃來解決相關的問題,首先要寫出相關狀態轉移方程.在寫出方程之前,對上面的題目進行

分析:假設給定兩個字串source:algorithm,target:altruistic,先對兩個字串進行對其操作:

a l g o r i t h m

a l t r u i s t i c

source[i]與target[j]的對應情況主要分為下面四種情況:

字元--字元,字元--空白,空白--字元,空白--空白

首先分析第一種情況:

字元--字元:

當source[i]==target[j]時,mep[i][j]=mep[i-1][j-1];

當source[i]!=target[j]時,mep[i][j]=mep[i-1][j-1]+1;

字元--空白:

考慮子字串,也就是說也就說mep[i-1][j]是存在的,因為目標串在該位置處為空白,說明j不會發生變化,

但是源字串只有i-1才匹配(狀態轉移);所以mep[i][j]=mep[i-1][j]+1;

空白--字元

同理mep[i][j] = mep[i][j-1]+1;

空白--空白 忽略

綜上所述總的狀態轉移方程為:

mep[i][j]=min(mep[i][j-1]+1,mep[i-1][j]+1,(source[i]==target[j]?0:1))

題目二:

傳統的編輯距離裡面有三種操作,即增、刪、改,我們現在要討論的編輯距離只允許兩種操作,即增加乙個字元、

刪除乙個字元。我們求兩個字串的這種編輯距離,即把乙個字串變成另外乙個字串的最少操作次數。

假定每個字串長度不超過1000,只有大寫英文本母組成。

根據題目所述:兩個字串進行對其操作

a l g o r i t h m

a l t r u i s t i c

以上三中情況不會出現:

字元--字元情況,把這中情況省略即可

public class mineditdistance 

for (int j = 0

; j < tlen; j++)

for (int i = 1

; i < slen; i++) else }}

return mep[slen - 1][tlen - 1];

} static int

min(int a, int b)

public static void

main(string args)

}

編輯字串距離

題目 題意 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另 乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪 除乙個字元。例如將kitten轉化成sitting sitten k s sittin ...

字串編輯距離

給出兩個單詞word1和word2,寫乙個函式計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 1 插入乙個字元 2 刪除乙個字元 3 替換乙個字元 格式 輸入行輸入兩個字串 word1 和 word2,最後輸出將 word1 轉換為 word2的最少操作次數 樣例輸入 wor...

字串編輯距離

題目 給定乙個源串和目標串,能夠對源串進行如下操作 1.在給定位置上插入乙個字元 2.替換任意字元 3.刪除任意字元 寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於2000。思路 如果有兩個串 a xabcdae 和 b xfdfa,它們的第乙個字元是相同的...