編輯距離
題目描述
設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種:
1、刪除乙個字元;
2、插入乙個字元;
3、將乙個字元改為另乙個字元。
對任的兩個字串a和b,計算出將字串a變換為字串b所用的最少字元操作次數。
輸入第一行為字串a;第二行為字串b;字串a和b的長度均小於200。
輸出只有乙個正整數,為最少字元操作次數。
樣例輸入
sfdqxbw
gfdgw
樣例輸出
題目解析:
這道題其實和最長公共子串行的題類似,都是比較之前的幾個狀態,然後取最什麼的狀態傳遞到後面的狀態中,從而達到最優解;
同理也是一一比較二個字元,不同的是,當他比較到二個字元是一樣的時候,那就等於之前的狀太,而不用加一,因為就代表這不用修改,當比較到二個字元不一樣的時候,那就要好好考慮了,,
題目中有三種操作,也就代表他有三種狀態可能達到修改完成的狀態,那就要分別比較這三個中哪乙個相對小作為後面承接;
我們分別考慮三種操作的之前狀態:
(1)插入:比如字串是sf和sfd 現在比較到最後的字元了,也就是f和d,怎麼做呢,也就是怎麼插入才是達到一樣的字串呢,就是在ff這個狀態的基礎上在第乙個字串的後面插入d是不是就是了呢!
(2)刪除:比如字串sfd和sf,現在比較到最後的字元,也就是d和f,同理,字串1 如何刪除才能達到第二個字串的狀態,顯而易見,刪除第乙個字串的最後乙個字元,也就是在ff這個狀態的基礎上加一;
(3)改正:比如字串sfd和sfc,怎麼樣達到目的,改第乙個字串的最後乙個字元,也就是在ff的狀態上加一得到;
特別注意初始化;
#include
#include
char a[2005];
char b[2005];
int c[2005][2005];
#define max(x,y) x>y?x:y
int main()}}
printf("%d\n",c[qq][pp]);
}
編輯距離 (dp)
編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sit...
DP 編輯距離
2019 02 27 題目及 更新 設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。對任意的兩個字串a和b,計算出將字串a變換為字串b所用的最少字元操作次數。第一行為字串a 第二行為字...
編輯距離 DP
設a aa和b bb是兩個字串。我們要用最少的代價 或者字元操作次數 將字串a aa轉換為字串b bb。字元操作有三種 1.插入乙個字元,所需代價為x xx2.刪除乙個字元,所需代價為y yy3.將乙個字元改為另乙個字元,即替換,所需代價為z zz輸入abab ab兩個字串,輸出代價 刪除 可以看做...