用java实现求两个字符串中最长子串
时间: 2023-05-20 20:02:58 浏览: 152
可以使用动态规划来解决这个问题。具体实现步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示字符串1中以第i个字符结尾的子串和字符串2中以第j个字符结尾的子串的最长公共子串的长度。
2. 初始化dp数组,将所有元素都赋值为0。
3. 遍历字符串1和字符串2,如果两个字符相等,则将dp[i][j]的值设置为dp[i-1][j-1]+1,否则将其设置为0。
4. 在遍历过程中,记录最长公共子串的长度和结束位置,即dp[i][j]的值最大的位置。
5. 根据最长公共子串的长度和结束位置,可以得到最长公共子串。
下面是Java代码实现:
public static String longestCommonSubstring(String str1, String str2) {
int m = str1.length();
int n = str2.length();
int[][] dp = new int[m + 1][n + 1];
int maxLength = 0;
int endIndex = 0;
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] > maxLength) {
maxLength = dp[i][j];
endIndex = i - 1;
}
} else {
dp[i][j] = 0;
}
}
}
return str1.substring(endIndex - maxLength + 1, endIndex + 1);
}
阅读全文