79. Longest Common Substring
Description:
Given two strings, find the longest common substring.
Return the length of it.
Example
Example 1:
Input: “ABCD” and “CBCE”
Output: 2
Explanation:
Longest common substring is "BC"
Example 2:
Input: “ABCD” and “EACB”
Output: 1
Explanation:
Longest common substring is 'A' or 'C' or 'B'
Challenge
O(n x m) time and memory.
Main Idea:
String Problem. The main idea is to use two pointers as the beginning of two strings. Then compare the longest common string it could be.
Tips/Notes:
- Be careful to the corner case, the border of two pointers.
Time/Space Cost:
Time Cost: O ( n m ) \ O(nm) O(nm)
Code:
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
int len1 = A.length();
int len2 = B.length();
if(!len1 || !len2){
return 0;
}
//vector<vector<int>> dp(len1+1, vector<int>(len2+1, 0));
int res = 0;
for(int k = 0; k < len1; k++){
for(int m = 0; m < len2; m++){
int i = k, j = m;
int tmp = 0;
// Don't forget to the corner case
while(A[i] == B[j] && j != len2 &&i != len1 ){
tmp++;
res = (res < tmp)? tmp : res;
i++;
j++;
}
}
}
return res;
}
};