583. Delete Operation for Two Strings

這個題中有個方法是求兩個字符串的最大公共子串的長度,動態規劃,必定記住:根據當前位置兩個字符是否是相同,作不一樣的處理。數組

/*
        兩個字符串,每次只能刪除一個字符,求多少步能夠讓兩個字符串相同,其實就是兩個字符串的最大公共子序列長度。
        重要,要記住,用動態規劃,dp[i][j]表明第一個字符前i個字符和第二個字符前j個字符的最大公共子序列長度是多少
        dp[i][j] = (word1[i]==word2[j])?dp[i-1][j-1]+1:Math.max(dp[i][j-1],dp[i-1][j])
         */
        int l1 =word1.length();
        int l2 = word2.length();
        int[][] dp = new int[l1+1][l2+1];
        for (int i = 1; i < l1+1; i++) {
            for (int j = 1; j < l2+1; j++) {
                //注意這裏因爲第一個字符須要前邊的,因此dp數組多了一個空,因此下標不對應了,動態規劃數組必定要考慮
                //數組下標和數據下標是否是對應。
                dp[i][j] = (word1.charAt(i-1)==word2.charAt(j-1))?dp[i-1][j-1]+1:Math.max(dp[i][j-1],dp[i-1][j]);
            }
        }
        return l1+l2-2*dp[l1][l2];
相關文章
相關標籤/搜索