動態規劃 之字串編輯距離 難度 2星

2021-08-13 16:26:21 字數 1895 閱讀 4643

#include 

/***

對於序列s和

t,它們之間距離定義為

:對二者其一進行幾次以下的操作

* (1)

刪去乙個字元;

(2)插入乙個字元;

(3)改變乙個字元。每進行一次操作,計數增加1。

* 將s和

t變為同乙個字串的最小計數即為它們的距離。給出相應演算法。

*/#define

min(x,y) (x#define

inf

50000

#define

sl 7

//字串

s的有效長度

#define

tl 5

//字串

t的有效長度

static chars[sl+2] = " acbdepo"

;static chart[tl+2] = " abcde"

;/**

* 我的思路如下

* 設子問題為

:請求出字串s的前

i個字元組成的字串與字串t前

j個字元組成的字串

* 每次對其一進行以下其中一項操作

: (1)

刪去乙個字元;

(2)插入乙個字元;

(3)改變乙個字元。

* 每次操作後運算元

+1,最終使兩個字串相等

,求最小的運算元

minsum

* 找出邊界:顯然

i=0時

,minsum=j,

因為i=0時,

所需要的就是連續插入

j次對應字串

t的字元,*

同理j=0

時也一樣

*///

遞迴intsolve_1(inti,

intj)

//遞迴

+記憶陣列的

dpstatic intmemo[sl+1][tl+1];

intsolve_2(inti,

intj)

//遞推

static intdp[sl+1][tl+1];

intsolve_3()

for(intj = 0

; j <= tl

; ++j)

for(inti = 1

; i <= sl

; ++i) }}

returndp[sl][tl];

}intmain()

}printf("solve_2:

%d\n

", solve_2(sl

, tl));

// for (int i = 0; i <= sl; ++i)

// printf("\n");

// }

printf("solve_3:

%d\n

", solve_3());

return0

;}

執行結果:

solve_1:4

solve_2:4

solve_3:4

動態規劃之字串最短編輯距離

題目描述給定兩個字串a和b,現在要將a經過若干操作變為b,可進行的操作有 刪除 將字串a中的某個字元刪除。插入 在字串a的某個位置插入某個字元。替換 將字串a中的某個字元替換為另乙個字元。現在請你求出,將a變為b至少需要進行多少次操作。輸入格式第一行包含整數n,表示字串a的長度。第二行包含乙個長度為...

動態規劃 計算字串編輯距離

題目 設a 和b 是2 個字串。要用最少的字元操作將字串a 轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b 所用的最少字元運算元稱為字串a到b 的編輯距離,記為d a,b 試設計乙個有效演算法,對任給的2 個字串a和b,計...

動態規劃 線性 DP 字串編輯距離

字串編輯距離,即 levenshtein 距離,是 科學家 vladimir levenshtein 提出的概念,是指從乙個字串修改到另乙個字串時,編輯單個字元所需的最少次數,編輯單個字元允許的操作有 替換 插入 刪除。levenshtein 距離一般用來衡量兩個字串的相似度,一般來說,兩個字串的編...