查找两个字符串a,b中的最长公共子串 暴力破解法

思路

直接从短串中从长到短取字串,判断子串是否在长串中,如果在长串中,就返回该子串,否则下一个子串。

C++ 实现

#include<iostream>
#include<string>

using namespace std;

string findLongest(string shorts, string longs) {
    int shortSize = shorts.size();
    int count = shortSize;
    string subStr;
    while (count > 0) {
        for (int i = 0; i + count <= shortSize; i++) {
            subStr = shorts.substr(i, count);
            string::size_type pos = longs.find(subStr);
            if (pos != longs.npos) {
                return subStr;
            }
        }
        --count;
    }
    return shorts.substr(0, 1);
}

int main() {
    string str1, str2;
    int shortStr;
    cin >> str1;
    cin >> str2;
    if (str1.size() < str2.size()) {
        shortStr = 1;
    } else {
        shortStr = 0;
    }
    // 从较短的字符串中不停的取子串,在长串中查找子串
    if (shortStr)
        str1 = findLongest(str1, str2);
    else
        str1 = findLongest(str2, str1);
    
    cout << str1;
    return 0;
}