给出两个字符串,找到最长公共子串,并返回其长度。
注意事项
子串的字符应该连续的出现在原字符串中,这与子序
给出A=“ABCD”,B=“CBCE”,返回 2
public class Solution {
/**
* @param A, B: Two string.
* @return: the length of the longest common substring.
*/
public int longestCommonSubstring(String A, String B) {
// write your code here
int n = A.length();
int m = B.length();
int num = 0;
int[][] dp = new int[n + 1][m + 1]; // ///不赋值时的初始值为0
for (int i = 1; i <= n; i++) {
char c1 = A.charAt(i - 1);
for (int j = 1; j <= m; j++) {
char c2 = B.charAt(j - 1);
if (c1 == c2) {
dp[i][j] = dp[i - 1][j - 1] + 1; //出现一个公共字符就加1
} else {
dp[i][j] = 0;
}
num = Math.max(num, dp[i][j]);
}
//return num; /for循环结束后才return
}
return num;
}
}
解题思路:
比较A和B中相同的字符,如果有相同的字符,数组dp增加一个元素并值相对前一位元素加1(没有元素时为0)。