編輯距離 (dp)

2021-08-06 01:59:11 字數 1331 閱讀 1992

編輯距離,又稱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 將乙個字元改為另乙個字元。...