- 最长公共子串
中文
English
给出两个字符串,找到最长公共子串,并返回其长度。
样例
样例 1:
输入: “ABCD” and “CBCE”
输出: 2
解释:
最长公共子串是 "BC"
样例 2:
输入: “ABCD” and “EACB”
输出: 1
解释:
最长公共子串是 'A' 或 'C' 或 'B'
class Solution {
public:
/**
* @param A: A string
* @param B: A string
* @return: the length of the longest common substring.
*/
int longestCommonSubstring(string &A, string &B) {
// write your code here
if(A.size() == 0 || B.size() == 0)
return 0;
vector<vector<int>> dp;
dp.resize(A.size());
for (int k = 0; k < A.size(); k++)
dp[k].resize(B.size());
for (int i = 0; i < A.size(); i++) {
if (A[i] == B[0])
dp[i][0] = 1;
}
for (int j = 0; j < B.size(); j++) {
if (A[0] == B[j])
dp[0][j] = 1;
}
for (int i = 1; i < A.size(); i++) {
for (int j = 1; j < B.size(); j++) {
if (A[i] == B[j])
dp[i][j] = dp[i-1][j-1] + 1;
}
}
int end=0;
int max=0;
for (int i = 0; i < A.size(); i++) {
for (int j = 0; j < B.size(); j++) {
if (dp[i][j]>max)
{
end=i;
max=dp[i][j];
}
}
}
return max;
}
};