題目:
給定兩個字串 a 和 b,現在要將 a 經過若干操作變為 b,可進行的操作有:
刪除–將字串 a 中的某個字元刪除。
插入–在字串 a 的某個位置插入某個字元。
替換–將字串 a 中的某個字元替換為另乙個字元。
現在請你求出,將 a 變為 b 至少需要進行多少次操作。
集合:將a[1i]變成b[1j]的操作方式
屬性:min
有三種操作,所以有三個子集
考慮狀態轉移的時候
先考慮如果我沒有進行這個操作應該是什麼狀態
然後考慮你進行這一步操作之後會對你下乙個狀態造成什麼影響
然後再加上之前狀態表示中你決策出來的那個dp屬性
1)刪除操作:把a[i]刪掉之後a[1i]和b[1j]匹配
所以之前要先做到a[1(i-1)]和b[1j]匹配
f[i-1][j] + 1
2)插入操作:插入之後a[i]與b[j]完全匹配,所以插入的就是b[j]
那填之前a[1i]和b[1(j-1)]匹配
f[i][j-1] + 1
3)替換操作:把a[i]改成b[j]之後想要a[1i]與b[1j]匹配
那麼修改這一位之前,a[1(i-1)]應該與b[1(j-1)]匹配
f[i-1][j-1] + 1
但是如果本來a[i]與b[j]這一位上就相等,那麼不用改,即
f[i-1][j-1] + 0
f[i][j]就由以上三個可能狀態轉移過來,取個min
f[0][i]如果a初始長度就是0,那麼只能用插入操作讓它變成b
f[i][0]同樣地,如果b的長度是0,那麼a只能用刪除操作讓它變成b
code:
#include #include #include using namespace std;
const int n = 1e3 + 10;
int f[n][n];
char a[n],b[n];
int main()
cout << f[n][m];
return 0;
}
最短編輯距離 python 最短編輯距離演算法實現
一,演算法介紹 在cs124課程的第一周提到 求解兩個字串相似度的演算法 minimum edit distance 最短編輯距離 演算法。該演算法在nlp 自然語言處理 中也會用到。如何定義相似度呢?任給兩個字串x 和y,使用以下三種操作將 字串x 變到 字串y 插入 insert 操作 刪除操作...
最短編輯距離
給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式 第一行包含整數n,表示字串a的長度。第二行包含乙個長度為n的字...
最短編輯距離
題目鏈結 給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式 第一行包含整數n,表示字串a的長度。第二行包含乙個長...