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

 

posted @ 2020-07-31 20:33  repinkply  阅读(225)  评论(0)    收藏  举报