题目
分析
要求"A1B26C"和"A34B5C"的最长公共子序列,可以先求
①"A1B26C"和"A34B5C"
②"A1B26"和"A34B5C"
③"A1B26C"和"A34B5"
④"A1B26"和"A34B5"
的最长公共子序列。
“A1B26C"和”"的最长公共子序列长度为0.
题解
package com.company.test5;
import static java.lang.Math.max;
public class Test7 {
public static void main(String[] args) {
String s1="A1B26C";
String s2="A34B5C";
// 长度为i,j的公共子序列的最大长度dp[i][j]
/*
* ①dp[i][j]=dp[i-1][j]
* ②dp[i][j]=dp[i][j-1]
* ③dp[i][j]=dp[i-1][j-1]+1
* s1[i]==s2[j]
* */
int[][] dp=new int[s1.length()+1][s2.length()+1];
for (int i = 1; i <= s1.length(); i++) {
for (int j = 1; j <= s2.length() ; j++) {
if(s1.charAt(i-1)==s2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1]+1;
}else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
return;
// 30
}
}
dp[6][6]就是本题的解。