1. 程式人生 > 實用技巧 >最長公共子串(HJ75)

最長公共子串(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; }