給定兩個單詞 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 替...