1 public class Solution {
2 /**
3 * @param A, B: Two string.
4 * @return: the length of the longest common substring.
5 */
6 public int longestCommonSubstring(String A, String B) {
7 // write your code here
8 if (A == null || B == null) {
9 return 0;
10 }
11
12 int lenA = A.length();
13 int lenB = B.length();
14
15 // bug 1: use error init.
16 int[][] D = new int[lenA + 1][lenB + 1];
17
18 int max = 0;
19
20 // BUG 2: should use <= instead of <
21 for (int i = 0; i <= lenA; i++) {
22 for (int j = 0; j <= lenB; j++) {
23 if (i == 0 || j == 0) {
24 D[i][j] = 0;
25 } else {
26 if (A.charAt(i - 1) == B.charAt(j - 1)) {
27 D[i][j] = D[i - 1][j - 1] + 1;
28 } else {
29 D[i][j] = 0;
30 }
31 }
32
33 max = Math.max(max, D[i][j]);
34 }
35 }
36
37 return max;
38 }
39 }