力扣-1143-最长公共子序列

题目:
1143. Longest Common Subsequence


解题思路:
典型二维动态规划例题。
“因为子序列类型的问题,穷举出所有可能的结果都不容易,而动态规划算法做的就是穷举 + 剪枝,它俩天生一对儿。所以可以说只要涉及子序列问题,十有八九都需要动态规划来解决,往这方面考虑就对了。” ——labuladong


代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int longestCommonSubsequence(String text1, String text2) {
char[] t1 = text1.toCharArray();
char[] t2 = text2.toCharArray();

int len1 = t1.length;
int len2 = t2.length;
int[][] dp = new int[len1+1][len2+1];
for(int i = 1;i<len1+1;i++){
for(int j = 1;j<len2+1;j++){
if(t1[i-1] == t2[j-1]){
dp[i][j] = 1 + dp[i-1][j-1];
}else{
dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[len1][len2];
}