這個題中有個方法是求兩個字符串的最大公共子串的長度,動態規劃,必定記住:根據當前位置兩個字符是否是相同,作不一樣的處理。數組
/* 兩個字符串,每次只能刪除一個字符,求多少步能夠讓兩個字符串相同,其實就是兩個字符串的最大公共子序列長度。 重要,要記住,用動態規劃,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];