DP 編輯距離

2022-05-25 03:33:12 字數 1226 閱讀 9428

日常吐槽:關於dp,有一種莫名的恐懼...maybe源於與mtw大佬與quantum11大佬,初中時抬老師爬樓梯的經歷。。。

言歸正傳:

【題目描述】

設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種:

1、刪除乙個字元;

2、插入乙個字元;

3、將乙個字元改為另乙個字元。

對任意的兩個字串a和b,計算出將字串a變換為字串b所用的最少字元操作次數。

【輸入】

第一行為字串a;第二行為字串b;字串a和b的長度均小於2000。

【輸出】

只有乙個正整數,為最少字元操作次數。

【輸入樣例】

sfdqxbw

gfdgw

【輸出樣例】

4比較基礎的一道dp題目,(我才不會告訴你們,我也是看了書才會做)~

既然是dp,那麼我們分析一下子問題,當前處理a到第i個字元,處理b到第j個字元

狀態f[i][j]代表此時最小的編輯距離

不難推出:

f[i][j]=min+1;

的樣子額...

如果a[i]==b[i]的話,我們發現

then:

if(a[i]==b[j]) 

f[i][j]=min(min(f[i-1][j]+1,f[i][j-1]+1),f[i-1][j-1]);

else

f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;

接下來

假設a空:則 for(int j=0;j<=m;j++) f[0][j]=j;

假設b空:則 for(int i=0;i<=n;i++) f[i][0]=i;

才怪呢...

附上**

#include#include#include#include#includeusing namespace std;

inline int read()

while(isdigit(chr))

return ans*f;

}int f[2005][2005];

int n,m;

char a[2005],b[2005];

int main()

cout

}

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