给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。
public class getLCS {
//dp[i][j] 表示str1[0...i]与str2[0...j]最长公共子序列长度
//从左到右,从上到下计算dp[i][j].求法如下:
//第一列:dp[i][0] 代表str1[0...i]与str2[0]最长公共子序列,str2[0]只有一个字符,如果str1[i]==str2[0] ,则dp[i...N][0]为0
//第一行同上
//其他位置,来自下面三种情况
//情况一:可能是dp[i-1][j]
//情况二:可能是dp[i][j-1]
//情况三:str1[i]==str2[j] dp[i-1][j-1]+1
int findLCS(char[] A,int n,char[] B,int m){
int [][] dp = new int[n][m];
for(int i=0,temp=0;i<n;i++){
if(B[0]==A[i])
temp=1;
dp[i][0]=temp;
}
for(int i=0,temp=0;i<m;i++){
if(A[0]==B[i]){
temp=1;
}
dp[0][i]=temp;
}
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
int max = Math.max(dp[i-1][j],dp[i][j-1]);
if(A[i]==B[j])
max=Math.max(dp[i-1][j-1]+1,m);
dp[i][j]=max;
}
}
return dp[n-1][m-1];
}
}