acwing 902 最短編輯距離 (線性DP)

2021-10-22 07:01:52 字數 932 閱讀 4486

對於兩個字串,我們一般用 f[i][j] 來表示第乙個串的前 i 個字母和第二個串的前 j 個字母 ,然後我們劃分集合,分三種操作。

刪除操作 :f[i][j]我們需要刪除a字串的第i ,那麼就需要確保a 的第前 i-1 個字母和b的前 j 個字母相同 ,那麼轉移方程就是 f[i-1][j]+1(操作步驟)

增加操作:f[i][j]我們需要增加第 i 字母使得 b的 j-1 和 a 原來的 i 匹配 ,那麼轉移方程就是 f[i][j-1] +1

修改操作 : f[i][j]我們要修改a中的第i個字母為b[j],那麼就要使a[i-1]=b[j-1],對於a[i]==b[j],我們就不需要操作次數,對於a[i]!=b[j] ,我們就需要額外一次操作,使得a[i]==a[j]

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

1100

;const

int inf=

0x3f3f3f3f

;int n, m;

char a[n]

, b[n]

;int f[n]

[n];

intmain()

} cout << f[n]

[m]<< endl;

return0;

}

ACwing 902最短編輯距離 (線性dp

給出兩個字串a,b,三種操作 刪除a中某個字元 a中插入乙個字元 修改a中某個字元 問將a變成b最小的操作步數。dp i j 表示將a 1 i 變成b 1 j 的最小步數 狀態轉移 對於每個a i 有三種操作 刪除a i dp i j dp i 1 j 1a i 後面插入b j dp i j dp ...

ACwing 902最短編輯距離 (線性dp

給出兩個字串a,b,三種操作 刪除a中某個字元 a中插入乙個字元 修改a中某個字元 問將a變成b最小的操作步數。dp i j 表示將a 1 i 變成b 1 j 的最小步數 狀態轉移 對於每個a i 有三種操作 刪除a i dp i j dp i 1 j 1 a i 後面插入b j dp i j dp...

最短編輯距離 python 最短編輯距離演算法實現

一,演算法介紹 在cs124課程的第一周提到 求解兩個字串相似度的演算法 minimum edit distance 最短編輯距離 演算法。該演算法在nlp 自然語言處理 中也會用到。如何定義相似度呢?任給兩個字串x 和y,使用以下三種操作將 字串x 變到 字串y 插入 insert 操作 刪除操作...