Description
Given two strings, find the longest common substring.
Return the length of it.
Notice
The characters in substring should occur continuously in original string. This is different with subsequence.
Example
Given A = "ABCD"
, B = "CBCE"
, return 2
.
Solution
这题和subsequence的区别就在于substring是连续的。dp[i][j]表示必须包含A的第i点和B的第j点的common substring的长度。
public class Solution {
/*
* @param A: A string
* @param B: A string
* @return: the length of the longest common substring.
*/
public int longestCommonSubstring(String A, String B) {
// write your code here
if (A == null || A.length() == 0 || B == null || B.length() == 0) {
return 0;
}
int n = A.length();
int m = B.length();
int max = 0;
int[][] dp = new int[n + 1][m + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (A.charAt(i - 1) == B.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
max = Math.max(max, dp[i][j]);
}
}
}
return max;
}
}