题目描述:写函数实现如下功能,给定字符串A和B,输出A和B中的最长公共子串。比如A="aocdfe" B="pmcdfa" 则输出"cdf"。 输入描述:输入待处理的两个字符串 str1,str2 输出描述:找出两个字符串最长的公共子串 java代码
时间: 2024-05-10 22:20:43 浏览: 151
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
System.out.println(longestCommonSubstring(str1, str2));
}
public static String longestCommonSubstring(String str1, String str2) {
int m = str1.length();
int n = str2.length();
int[][] dp = new int[m + 1][n + 1]; // dp[i][j]表示以str1[i-1]和str2[j-1]结尾的公共子串长度
int maxLen = 0; // 记录最长公共子串的长度
int endIndex = 0; // 记录最长公共子串在str1中的结束位置
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) { // 如果当前字符相同
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > maxLen) { // 如果当前公共子串长度大于之前的最长公共子串长度
maxLen = dp[i][j];
endIndex = i - 1;
}
}
}
}
return str1.substring(endIndex - maxLen + 1, endIndex + 1);
}
}
```
阅读全文