写一个最长公共子序列的java代码,并打印出其中一个最长公共子序列
时间: 2023-11-25 10:05:37 浏览: 70
好的,下面是最长公共子序列的Java代码:
```java
public class LongestCommonSubsequence {
public static int[][] getLcsLength(String s1, String s2) {
int m = s1.length();
int n = s2.length();
int[][] c = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
c[i][j] = c[i - 1][j - 1] + 1;
} else {
c[i][j] = Math.max(c[i][j - 1], c[i - 1][j]);
}
}
}
return c;
}
public static String getLcs(String s1, String s2) {
int[][] c = getLcsLength(s1, s2);
int i = s1.length();
int j = s2.length();
StringBuilder sb = new StringBuilder();
while (i > 0 && j > 0) {
if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
sb.insert(0, s1.charAt(i - 1));
i--;
j--;
} else if (c[i][j - 1] > c[i - 1][j]) {
j--;
} else {
i--;
}
}
return sb.toString();
}
public static void main(String[] args) {
String s1 = "ABCDGH";
String s2 = "AEDFHR";
String lcs = getLcs(s1, s2);
System.out.println("最长公共子序列为:" + lcs);
}
}
```
运行结果为:
```
最长公共子序列为:ADH
```
注意,这里的代码实现只输出了其中一个最长公共子序列。如果有多个最长公共子序列,可以通过修改代码来输出所有的最长公共子序列。
阅读全文