class Solution { public int longestCommonSubsequence(String text1, String text2) { if (text1.length() == 0 || text2.length() == 0) return 0; int len1 = text1.length(); int len2 = text2.length(); int[][] dp = new int[len1+1][len2+1]; /** * if text1[i-1] = text2[j-1]:dp[i][j] = dp[i-1][j-1] + 1 * if text1[i-1] != text2[j-1]: dp[i][j] = max(dp[i-1][j], dp[i][j-1]) */ for (int i = 0; i < dp.length; i++) dp[i][0] = 0; for (int j = 0; j < dp[0].length; j++) dp[0][j] = 0; for (int i = 1; i < dp.length; i++) { for (int j = 1; j < dp[0].length; j++) { if (text1.charAt(i-1) == text2.charAt(j-1)) { dp[i][j] = dp[i-1][j-1] + 1; } else { dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]); } } } return dp[len1][len2]; } }
比较经典的二维dp题目,纪念一下