LintCode: Longest Common Substring
C++
暴力搜索
两个游标一个长度
i遍历a
j遍历b
len遍历公共子串长度
1 class Solution { 2 public: 3 /** 4 * @param A, B: Two string. 5 * @return: the length of the longest common substring. 6 */ 7 int longestCommonSubstring(string &A, string &B) { 8 // write your code here 9 int m = A.size(); 10 int n = B.size(); 11 if (m == 0 || n == 0) { 12 return 0; 13 } 14 int ans = 0; 15 for (int i = 0; i < m; ++i) { 16 for (int j = 0; j < n; ++j) { 17 int len = 0; 18 while (i + len < m && j + len < n && A[i + len] == B[j + len]) { 19 len ++; 20 ans = max(ans, len); 21 } 22 } 23 } 24 return ans; 25 } 26 };
C++,
dp
1 class Solution { 2 public: 3 /** 4 * @param A, B: Two string. 5 * @return: the length of the longest common substring. 6 */ 7 int longestCommonSubstring(string &A, string &B) { 8 // write your code here 9 int m = A.size(); 10 int n = B.size(); 11 if (m == 0 || n == 0) { 12 return 0; 13 } 14 vector<vector <int> > dp(m + 1, vector<int>(n + 1)); 15 // int[][] dp = new int[m + 1][n + 1]; 16 int ans = 0; 17 for (int i = 0; i <= m; ++i) { 18 for (int j = 0; j <= n; ++j) { 19 if (i == 0 || j == 0) { 20 dp[i][j] = 0; 21 } else { 22 if (A[i-1] == B[j-1]) { 23 dp[i][j] = dp[i - 1][j - 1] + 1; 24 ans = max(dp[i][j], ans); 25 } else { 26 dp[i][j] = 0; 27 } 28 } 29 } 30 } 31 return ans; 32 } 33 };
找我内推: 字节跳动各种岗位
作者:
ZH奶酪(张贺)
邮箱:
cheesezh@qq.com
出处:
http://www.cnblogs.com/CheeseZH/
*
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。