Lintcode119 Edit Distance solution 題解

【題目描述】

Given two wordsword1andword2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

·Insert a character

·Delete a character

·Replace a character

給出兩個單詞word1和word2,計算出將word1 轉換爲word2的最少操作次數。

你總共三種操作方法:

·插入一個字符

·刪除一個字符

·替換一個字符

【題目鏈接】

http://www.lintcode.com/en/problem/edit-distance/

【題目解析】

ed[i][j]表示將word1的前i個字符變成word2的前j個字符所需要的最少操作。

初始化:

ed[i][0]=i 刪除i次

ed[0][j]=j 添加j次

狀態函數:

如果word1.charAt(i-1)==word2.charAt(j-1)

ed[i][j]=min(min(ed[i-1][j], ed[i][j-1])+1, ed[i-1][j-1])

否則

ed[i][j]=min(min(ed[i-1][j], ed[i][j-1])+1, ed[i-1][j-1]+1)

即word1的前i爲字符轉換爲word2的前j位字符所需的最小操作有三種情況要討論:

1)將word1的第i位字符刪去。此時只要看word1的前i-1位字符轉換爲word2的前j位字符所需操作再加上剛纔的刪除操作。

2)將word2的第j位字符刪去。此時只要看word1的前i位字符轉換爲word2的前j-1位字符所需操作再加上剛纔的刪除操作。

3)將word1的第i位字符轉換爲word2的第j位字符。此時又分兩種情況:1)word1的第i位字符和word2的第j位字符相等,則對於word1的第i位字符和word2的第j位字符無序任何操作,直接看word1的前i-1位字符轉換爲word2的前j-1位字符所需操作2)word1的第i位字符和word2的第j位字符不相等,則要將word1的第i位字符轉換爲word2的第j位字符,然後就是1)的情況。

這三種情況裏面的最小值就是ed[i][j]的值。

【參考答案】

http://www.jiuzhang.com/solutions/edit-distance/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章