public class Solution {
public String LCS(String str1, String str2) {
if (str1 == null || str2 == null || str1.length() == 0 || str2.length() == 0) {
return "-1";
}
int m = str1.length();
int n = str2.length();
int[][] dp = new int[m + 1][n + 1];
int maxLength = 0; // 记录最长连续子串的长度
int maxEndIndex = 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] > maxLength) {
maxLength = dp[i][j]; // 更新最高分
maxEndIndex = i; // 记下这是 str1 的第几个字母
}
} else {
dp[i][j] = 0;
}
}
}
if (maxLength == 0) {
return "-1";
}
// substring 的用法是:从 (结束位置 - 长度) 开始截取,一直到结束位置
return str1.substring(maxEndIndex - maxLength, maxEndIndex);
}
}