最长公共子串LCS的使用
public class DP_LCS {
public static void main(String[] args) {
char[] A = {'s','a','d','s','t','o','r','y'};
char[] B = {'a','d','m','i','n','s','t','o','r','y'};
int dp[][] = new int[A.length+1][B.length+1];
for(int i = 0;i<dp.length;i++){
dp[i][0] = 0;
}
for (int j = 0;j<dp[0].length;j++){
dp[0][j] = 0;
}
//dp[4][6]表示asds admins的LCS长度
//假如A[4] == B[6] dp[4][6] = dp[3][5]+1
//否则dp[4][6] = max(dp[3][6],dp[4][5])
//dp[3][6]为asd和admins
//dp[4][5]为asds和admin
for (int i = 1;i<A.length;i++){
for (int j = 1;j<B.length;j++){
if(A[i] == B[j]){
dp[i][j] = dp[i-1][j-1]+1;
}else{
//这是为什么不是直接赋值以上的
//dp[i][j] = dp[i-1][j-1];
dp[i][j] = Integer.max(dp[i-1][j],dp[i][j-1]);
}
//System.out.println("i:"+i+" j: "+j+" dp: "+dp[i][j]);
}
}
System.out.println(dp[A.length-1][B.length-1]);
}
}