dp專題 編輯距離

2021-08-13 10:27:10 字數 1092 閱讀 6343

編輯距離

題目描述

設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兩個字串,輸出代價 刪除 可以看做...