编写程序,输入字符串A、B,输出A和B中的最长公共子串
时间: 2023-12-20 08:19:16 浏览: 64
好的,我可以给你提供一个Java的实现。以下是代码:
```java
public static String longestCommonSubstring(String A, String B) {
int m = A.length(), n = B.length();
int[][] dp = new int[m + 1][n + 1];
int maxLen = 0, end = 0;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (A.charAt(i - 1) == B.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > maxLen) {
maxLen = dp[i][j];
end = i - 1;
}
} else {
dp[i][j] = 0;
}
}
}
return A.substring(end - maxLen + 1, end + 1);
}
// 测试
public static void main(String[] args) {
String A = "abcde";
String B = "abfce";
System.out.println(longestCommonSubstring(A, B)); // 输出 "abc"
}
```
这段代码中,我们定义了一个静态方法`longestCommonSubstring`,它接受两个字符串A和B作为输入,返回A和B中的最长公共子串。
在方法内部,我们首先定义了一个二维数组`dp`,其中`dp[i][j]`表示以A[i-1]和B[j-1]结尾的最长公共子串的长度。然后,我们使用动态规划的方法填充`dp`数组,计算出最长公共子串的长度,并用变量`maxLen`和`end`记录下来最长公共子串的长度和在A中的结束位置。最后,我们通过`end - maxLen + 1`和`end`来求出最长公共子串在A中的起始位置,然后通过`substring`方法来获取最长公共子串。最后,我们将最长公共子串作为方法的返回值。
在测试代码中,我们定义了两个字符串A和B,然后调用`longestCommonSubstring`方法来计算它们的最长公共子串,并输出结果。
阅读全文