最長公共子串(HJ75)
阿新 • • 發佈:2020-07-31
一:解題思路
這道題目是一道動態規劃的題目,和 最長公共子序列這道題目有些類似,可以放在一起學習。
方法一:暴力破解法,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; }