java实现一个查找公共子串的方法
时间: 2023-04-05 17:02:32 浏览: 64
可以使用动态规划算法来实现查找公共子串的方法。具体步骤如下:
1. 定义一个二维数组dp,其中dp[i][j]表示以第一个字符串的第i个字符和第二个字符串的第j个字符结尾的公共子串的长度。
2. 初始化dp数组的第一行和第一列为0。
3. 遍历两个字符串,如果第一个字符串的第i个字符和第二个字符串的第j个字符相等,则dp[i][j] = dp[i-1][j-1] + 1,否则dp[i][j] = 0。
4. 在遍历过程中,记录最长的公共子串的长度和结束位置,即dp[i][j]的最大值和对应的i和j。
5. 根据最长公共子串的长度和结束位置,可以得到公共子串的起始位置和内容。
示例代码如下:
public static String findCommonSubstring(String str1, String str2) {
int len1 = str1.length();
int len2 = str2.length();
int[][] dp = new int[len1+1][len2+1];
int maxLen = 0;
int end = 0;
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; 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];
end = i;
}
} else {
dp[i][j] = 0;
}
}
}
if (maxLen == 0) {
return "";
} else {
return str1.substring(end-maxLen, end);
}
}