72 編輯距離

2021-08-30 11:39:25 字數 1657 閱讀 5061

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。

你可以對乙個單詞進行如下三種操作:

插入乙個字元

刪除乙個字元

替換乙個字元

示例 1:

輸入: word1 = 「horse」, word2 = 「ros」

輸出: 3

解釋:horse -> rorse (將 『h』 替換為 『r』)

rorse -> rose (刪除 『r』)

rose -> ros (刪除 『e』)

示例 2:

輸入: word1 = 「intention」, word2 = 「execution」

輸出: 5

解釋:intention -> inention (刪除 『t』)

inention -> enention (將 『i』 替換為 『e』)

enention -> exention (將 『n』 替換為 『x』)

exention -> exection (將 『n』 替換為 『c』)

exection -> execution (插入 『u』)

編輯距離是一道很經典的題目,典型的動態規劃題目,在許多演算法書上也有講述。

想求字串a,b的編輯距離,設a [1 : i ] 代表a的子串a.substr(0,i ),那麼dp[ i ][ j ] 就代表字串a [1 : i ] , b[1 : j]的編輯距離。

當a[i] != b[j]時,dp[ i + 1][ j + 1] = min(dp[ i + 1][ j ] +1 , dp[ i ][ j + 1] +1 , dp[ i ][ j ] +1)

否則dp[ i + 1][ j + 1] = min(dp[ i + 1][ j ] + 1 , dp[ i ][ j + 1] + 1, dp[ i ][ j ])

class

solution

for(

int loop =

1; loop < word2.

size()

; loop ++

)for

(int loop =

0; loop < word1.

size()

; loop++

)else

dp[loop +1]

[loop1 +1]

=minthree

(getdp

(loop , loop1 +1)

+1,getdp

(loop +

1, loop1)+1

, dp[loop]

[loop1]

+ temp);}

}return dp.

back()

.back()

;}intminthree

(int x ,

int y ,

int z)

else

}int

getdp

(const

int& x ,

const

int& y)

else

}private

: vectorint>

>dp;

int maxdis;

};

72 編輯距離

給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r r...

72 編輯距離

題目 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替換為...

72 編輯距離

編輯距離 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 h 替...