1. 程式人生 > >583. Delete Operation for Two Strings

583. Delete Operation for Two Strings

位置 兩個 字符 第一個 let span == 長度 col

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

/*
        兩個字符串,每次只能刪除一個字符,求多少步可以讓兩個字符串相同,其實就是兩個字符串的最大公共子序列長度。
        重要,要記住,用動態規劃,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];

583. Delete Operation for Two Strings