对于两个序列S1、S2,定义一个二维数组dp来记录最长公共子序列的长度,dp[i][j]表示S1前i个字符和S2前j个字符的最长公共子序列的长度。最长公共子序列的状态转移方程为:
class Solution {
public int lengthOfLCS(int[] nums1, int[] nums2) {
int n1 = nums1.length, n2= nums2.length;
int[][] dp = new int[n1+1][n2+1];
for(int i = 1; i <= n1; i++) {
for(int j = 1; j <= n2; j++) {
if(nums[i-1] == nums[j-1]) dp[i][j] = dp[i-1][j-1];
else dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[n1][n2];
}