使用动态规划算法求两个序列的最长公共子序列,需构造一条最长公共子序列。Java代码
时间: 2023-06-07 14:12:12 浏览: 119
利用动态规划算法解决最长公共子序列问题.doc
以下是使用动态规划算法求两个序列的最长公共子序列并构造一条最长公共子序列的Java代码。
```java
public static int[][] getLCS(char[] str1, char[] str2){
int[][] dp = new int[str1.length+1][str2.length+1];
for(int i = 1 ; i <= str1.length ; i++){
for(int j = 1 ; j <= str2.length ; j++){
if(str1[i-1] == str2[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
}else{
dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
}
}
}
return dp;
}
public static String getLCSString(char[] str1, char[] str2){
int[][] dp = getLCS(str1, str2);
int i = str1.length, j = str2.length;
Stack<Character> stack = new Stack<Character>();
while(i > 0 && j > 0){
if(str1[i-1] == str2[j-1]){
stack.push(str1[i-1]);
i--;
j--;
}else{
if(dp[i-1][j] > dp[i][j-1]){
i--;
}else{
j--;
}
}
}
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty()){
sb.append(stack.pop());
}
return sb.toString();
}
```
注:该代码计算的是字符数组的最长公共子序列,如果要计算字符串的最长公共子序列,可以将字符数组作为参数传入该函数。
阅读全文