java获取两个字符串中最大相同子串
可以使用动态规划的思想来解决这个问题。
首先,定义一个二维数组dp[i][j],表示以第一个字符串的第i个字符和第二个字符串的第j个字符为结尾的最大相同子串的长度。
然后,遍历两个字符串,如果当前字符相同,则dp[i][j] = dp[i-1][j-1] + 1;否则,dp[i][j] = 0。
最后,遍历dp数组,找到最大的dp[i][j],即为最大相同子串的长度。可以通过记录最大长度时的i和j,来获取最大相同子串的具体内容。
代码示例:
public static String getMaxCommonSubstring(String str1, String str2) { int len1 = str1.length(); int len2 = str2.length(); int[][] dp = new int[len1][len2]; int maxLen = 0; int maxEnd = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { if (str1.charAt(i) == str2.charAt(j)) { if (i == 0 || j == 0) { dp[i][j] = 1; } else { dp[i][j] = dp[i-1][j-1] + 1; } if (dp[i][j] > maxLen) { maxLen = dp[i][j]; maxEnd = i; } } else { dp[i][j] = 0; } } } return str1.substring(maxEnd-maxLen+1, maxEnd+1); }
相关推荐














