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

2021-10-03 06:47:56 字數 739 閱讀 9728

給出兩個字串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[i][j-1]+1如果a[i]!=b[j],修改a[i]為b[j],dp[i][j]=dp[i-1][j-1]+1

三種操作方式對於不同的狀態轉移。

特別注意的是,即使a[i]==b[j],也不能將dp[i][j]=dp[i-1][j-1],當strlen(a)>strlen(b)時,會出現反例

#include

using namespace std;

const

int maxn=

1005

;char a[maxn]

,b[maxn]

;int f[maxn]

[maxn]

;int n,m;

intmain()

cout<[m];

return0;

}

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

對於兩個字串,我們一般用 f i j 來表示第乙個串的前 i 個字母和第二個串的前 j 個字母 然後我們劃分集合,分三種操作。刪除操作 f i j 我們需要刪除a字串的第i 那麼就需要確保a 的第前 i 1 個字母和b的前 j 個字母相同 那麼轉移方程就是 f i 1 j 1 操作步驟 增加操作 f...

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 操作 刪除操作...