/**
* @Date: 2020-03-30
* @Description: 最长公共子串问题
*/
public static void longestCommonSubstring(char[] A, char[] B) {
int n = A.length;
int m = B.length;
int[][] C = new int[n + 1][m + 1];
int lMax = 0, pMax = 0;
//初始化
for (int i = 0; i <= n; i++) {
C[i][0] = 0;
}
for (int i = 0; i <= m; i++) {
C[0][i] = 0;
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
if (A[i] != B[j]) {
C[i][j] = 0;
} else {
C[i][j] = C[i - 1][j - 1] + 1;
if (C[i][j] > lMax) {
lMax = C[i][j];
pMax = i;
}
}
}
}
printSubstringRec(A, lMax, pMax);
}
public static void printSubstringRec(char[] A, int lMax, int pMax) {
if (lMax == 0) {
return;
}
for (int i = pMax - lMax + 1; i <= pMax; i++) {
System.out.println(A[i]);
}
}