Java求最长公共子序列长度 并输出 具体的最长公共子序列和长度
时间: 2024-03-30 19:13:39 浏览: 52
求最长公共子序列
5星 · 资源好评率100%
以下是Java代码,实现求最长公共子序列长度并输出具体的最长公共子序列和长度:
```java
import java.util.*;
public class LongestCommonSubsequence {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
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] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
System.out.println("最长公共子序列长度为:" + dp[s1.length()][s2.length()]);
System.out.println("最长公共子序列为:" + getLCS(s1, s2, dp));
}
public static String getLCS(String s1, String s2, int[][] dp) {
StringBuilder sb = new StringBuilder();
int i = s1.length();
int j = s2.length();
while (i > 0 && j > 0) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
sb.append(s1.charAt(i - 1));
i--;
j--;
} else if (dp[i - 1][j] > dp[i][j - 1]) {
i--;
} else {
j--;
}
}
return sb.reverse().toString();
}
}
```
输入两个字符串,使用动态规划求解最长公共子序列长度,同时使用回溯法获取最长公共子序列。最后输出最长公共子序列长度和最长公共子序列。
阅读全文