題目描述:給定乙個源串和目標串,能夠對源串進行如下操作:
在給定位置上插入乙個字元
替換任意字元
刪除任意字元
寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於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 mineditdistancefor (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,它們的第乙個字元是相同的...