很早之前就看到這道題了,當時覺得毫無頭緒就沒有去做,今天終於做到了這道題,寫一下題解
題目:給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。
你可以對乙個單詞進行如下三種操作:
插入乙個字元
刪除乙個字元
替換乙個字元
示例:輸入: word1 = "horse", word2 = "ros"
輸出: 3
解釋:
horse -> rorse (將 'h' 替換為 'r')
rorse -> rose (刪除 'r')
rose -> ros (刪除 'e')
我們用乙個陣列dp[i][j]來表示word1的前i位轉換成word2的前j位最小運算元。
最終我們需要的答案就是dp[n][m]的值,也就是word1的前n位轉換成word2的前m位所需最小運算元
(n和m分別為word1和word2的長度)
然後初始化該陣列(就是i==0的時候和j==0的時候)
i==0 && j!=0 的時候表示把乙個空字串轉換成word2的前j位,最小運算元也就是word2的長度了。
i!=0 && j==0 的時候表示把乙個空字串轉換成word1的前i位,最小運算元也就是word1的長度了。
其他的暫且為0ro
s012
3h10
00o2
000r
3000
s000
e500
0我們從i==1和j==1開始遍歷陣列,對於當前的dp[i][j],我們有三種操作
插入:dp[i][j] = dp[i][j-1] + 1 //word1的i位變成word2的j-1位然後插入乙個字元,加1運算元
刪除:dp[i][j] = dp[i-1][j] + 1 //word1的i-1位變成word2的j位然後刪除乙個字元,加1運算元
替換:dp[i][j] = dp[i-1][j-1] + (word[i] != word[j]) //如果word[i] == word[j] 那麼這個表示式為0,也就是說對於當前位置,我們不用做任何操作,因為它們相等,所以加0. 如果不相等,這個表示式為1,就代表要替換當前字元,加1運算元。
對於這三種操作取最小值作為dp[i][j],保證dp[i][j]為最小值
最後的**如下:
最後答案:dp[n][m]=3
**:class solution ;
for(int i=0;i有什麼錯誤還請大佬指出!
編輯距離及編輯距離演算法
編輯距離概念描述 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 俄...
編輯距離及編輯距離演算法
include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...
編輯距離及編輯距離演算法
include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...