72. Edit Distance

sequence alignment 典型的問(wèn)題,只是mismatch和gap的cost都是1的簡(jiǎn)化版。如果單純的dp這道題可能不值hard的難度。關(guān)鍵是如果把O(mn)的space變成O(m+n); 再高級(jí)一點(diǎn)的improvement是加上divide and conquer.
參考:Algorithm Design,chapter 6

// 最基本的DP思想:時(shí)間O(mn),空間O(mn)
public class Solution {
    public int minDistance(String word1, String word2) {
        int n1 = word1.length(), n2 = word2.length();
        int dp[][] = new int[n1+1][n2+1];
        dp[0][0] = 0;
        // w1 is empty:
        for(int j=1; j<=n2; j++)
            dp[0][j] = j;
        // w2 is empty:
        for(int i=1; i<=n1; i++)
            dp[i][0] = i;        
        // fill the table:
        for(int i=1; i<=n1; i++) {
            for(int j=1; j<=n2; j++) {
                if(word1.charAt(i-1) == word2.charAt(j-1))  dp[i][j] = dp[i-1][j-1];
                else    dp[i][j] = Math.min(Math.min(1+dp[i-1][j-1],1+dp[i-1][j]), 1+dp[i][j-1]);
            }
        }
        return dp[n1][n2];
    }
}
//空間的improvement:空間O(m+n) 重點(diǎn)在把DP table的n列變成兩列,previous iteration的值和 current iteration的值。

public class Solution {
    public int minDistance(String word1, String word2) {
        int n1 = word1.length(), n2 = word2.length();
        int dp[][] = new int[n1+1][2];
        // p is empty:
        for(int i = 0; i<=n1; i++) {
            dp[i][0] = i;
        }
        // s is empty:
        for(int j = 1; j<=n2; j++) {
            dp[0][1] = j;
            for(int i=1; i<=n1; i++) {
                if(word1.charAt(i-1) == word2.charAt(j-1))
                    dp[i][1] = dp[i-1][0];
                else 
                    dp[i][1] = Math.min(Math.min(1+dp[i-1][0], 1+dp[i-1][1]), 1+dp[i][0]);
            }
            for(int i=0; i<=n1; i++) {
                dp[i][0] = dp[i][1];
            }
        }
        return dp[n1][0];
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容