问题描述:对于两个字符串,求它们的最长公共子序列。
输入:
1A2C3D4B56
B1D23CA45B6A
输出:6
思路:用二维数组dp保存不同长度的str1和str2的最长公共子序列
dp[i][j]表示以str1的i位置和str2的j位置的公共子序列最大长度
则当str1[i]==str2[j] , dp[i][j] = dp[i-1][j-1] +1
当str1[i]!=str2[j] , dp[i][j] = max(dp[i][j-1], dp[i-1][j])
//最长公共子序列 n*n
public static int findLCS(String A, int n, String B, int m) {
// write code here
int[][] dp = new int[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(A.charAt(i-1)==B.charAt(j-1)){
dp[i][j] = dp[i-1][j-1] + 1;
}else{
dp[i][j] = Math.max(dp[i][j-1], dp[i-1][j]);
}
}
}
return dp[n][m];
}