描述
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。
数据范围:字符串长度:1 <= s <= 150
进阶:时间复杂度:O(n^3),空间复杂度:O(n)
输入描述:
输入两个只包含小写字母的字符串
输出描述:
输出一个整数,代表最大公共子串的长度
示例1
输入:
asdfas werasdfaswer
输出:
6
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
string input1;
string input2;
cin >> input1;
cin >> input2;
set<int> sizeSet;
//小的在前,大的在后
if(input1.size() > input2.size())
swap(input1, input2);
int len1 = input1.size();
int len2 = input2.size();
//从前往后,一个一个的比,2个2个的比,一直到最后整个小的与大的比
for(int j = 1; j <= len1; j++)
{
for(int i = 0; i <= len1-j; i++)
{
for(int k = 0; k <= len2-j; k++)
{
if(input1.substr(i, j) == input2.substr(k, j))
sizeSet.insert(input1.substr(i, j).size()); //相同的字符串,size塞进set
}
}
}
if(sizeSet.empty())
cout << 0 << endl;
else
//输出反向迭代器头部元素
cout << *(sizeSet.rbegin()) << endl;
return 0;
}