给出两个字符串,找到最长公共子串,并返回其长度。
与LintCode上的另一题类似, 不同的是“串”是连续的,而“序列”不要求连续。
状态方程:
f[i][j] = f[i-1][j-1] + 1; (A[i] = B[i])时
f[i][j] = 0; (A[i] != B[i])时
class Solution {
public:
/**
* @param A, B: Two string.
* @return: the length of the longest common substring.
*/
int longestCommonSubstring(string &A, string &B) {
// write your code here
int m = A.size();
int n = B.size();
vector<vector<int> > dp(m+1, vector<int>(n+1));
for(int i=0; i<=m; i++){
for(int j=0; j<=n; j++){
if(i==0 || j==0){
dp[i][j] = 0;
}
else{
if(A[i-1] == B[j-1]){
dp[i][j] = dp[i-1][j-1] + 1;
}
else{
dp[i][j] = 0;
}
}
}
}
int maxNum = 0;
for(int i=0; i<=m; i++){
for(int j=0; j<=n; j++){
if (maxNum < dp[i][j]){
maxNum = dp[i][j];
}
}
}
return maxNum;
}
};
string A = "ABCD";
string B = "CBCE";
状态矩阵: