最长公共子串(HJ75)
一:解题思路
这道题目是一道动态规划的题目,和 最长公共子序列这道题目有些类似,可以放在一起学习。
方法一:暴力破解法,Time:O(n^3),Space:O(1)
方法二:动态规划,Time:O(n^2),Space:O(1)
二:完整代码示例 (C++版和Java版)
方法一C++:
#include <iostream> #include <string> using namespace std; int maxSubStr(string& a, string& b) { if (a.size() == 0 || b.size() == 0) return 0; int maxValue = 0; for (int i = 0; i < a.size(); i++) { for (int j = 0; j < b.size(); j++) { int start1 = i; int start2 = j; int count = 0; while (a[start1] == b[start2] && start1 < a.size() && start2 < b.size()) { start1++; start2++; count++; } if (count > maxValue) { maxValue = count; } count = 0; } } return maxValue; } int main() { string str1 = ""; string str2 = ""; while (cin >> str1 >> str2) { cout << maxSubStr(str1,str2) << endl; } return 0; }

浙公网安备 33010602011771号