/**
* 动态规划
*
* 求两个字符串的最大子序列
* */
public class LCS {
public int findLcs(String A,String B){
int n = A.length();
int m = B.length();
char[] a = A.toCharArray();
char[] b = B.toCharArray();
int[][] db = new int[n][m];
for(int i = 0;i < n;i++){ //判断第一列
if(a[i] == b[0]){
db[i][0] = 1;
for(int j = i + 1;j < n;j++){
db[j][0] = 1;
}
break;
}
}
for(int i = 0;i < m;i++){
if(a[0] == b[i]){
db[0][i] = 1;
System.out.print(b[i] + " ");
for(int j = i + 1;j < m;j++){
db[0][j] = 1;
}
break;
}
}
for(int i = 1;i < n;i++){
for(int j = 1;j < m;j++){
if(a[i] == b[j]){
db[i][j] = db[i - 1][j - 1] + 1;
System.out.print(b[j] + " ");
}else{
db[i][j] = Math.max(db[i - 1][j],db[i][j - 1]);
}
}
}
// for(int i = 0;i < n;i++){
// for(int j = 0;j < m;j++){
// System.out.print(db[i][j] + " ");
// }
// System.out.println();
// }
System.out.println();
return db[n - 1][m - 1];
}
public static void main(String[] args){
LCS l = new LCS();
int i = l.findLcs("android","random");
System.out.println(i);
}
}