編輯距離,又稱levenshtein距離(也叫做edit distance),是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。
例如將kitten一字轉成sitting:
sitten (k->s)
sittin (e->i)
sitting (->g)
所以kitten和sitting的編輯距離是3。俄羅斯科學家vladimir levenshtein在2023年提出這個概念。
給出兩個字串a,b,求a和b的編輯距離。
input
第1行:字串a(a的長度 <= 1000)。
第2行:字串b(b的長度 <= 1000)。
output
輸出a和b的編輯距離
sample input
kitten
sitting
sample output3
思路 子問題: 用dp[x][y]表示編輯a串前x位和b串前y位的編輯距離2.
狀態轉移:(1)當第x位和第y位對齊時
(1.1)若a[x]==b[y]時,此時不需要編輯,dp[x][y] = dp[x-1][y-1]
(1.2)當a[x] != b[y]時,此時需要編輯,dp[x][y] = dp[x-1][y-1] + 1
(2)當第x位和第y位不對齊時
(2.1)當第x位和第y-1位對齊時,此時需要編輯,dp[x][y] = dp[x][y-1] + 1
(2.2)當第x-1位和第y位對其時。此時需要編輯,dp[x][y] = dp[x-1][y] + 1
3.自底向上求解:
初始化dp for (int i = 1;i <= lena;i++)
for (int i = 0;i <= lenb;i++)
求解: for (int i = 1;i <= lena;i++) }
ac**:
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
char a[1005],b[1005],ans[1005];
int dp[1005][1055];
int min(int a,int b,int c)
int main()
}printf("%d\n",dp[la][lb]);
return 0;
}
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兩個字串,輸出代價 刪除 可以看做...
DP 編輯距離
日常吐槽 關於dp,有一種莫名的恐懼.maybe源於與mtw大佬與quantum11大佬,初中時抬老師爬樓梯的經歷。言歸正傳 題目描述 設a和b是兩個字串。我們要用最少的字元操作次數,將字串a轉換為字串b。這裡所說的字元操作共有三種 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。...