描述
给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。
注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。
数据范围:字符串长度:1≤s≤150
进阶:时间复杂度:O(n^3),空间复杂度:O(n)
输入描述:
输入两个只包含小写字母的字符串
输出描述:
输出一个整数,代表最大公共子串的长度
示例1
输入:
asdfas werasdfaswer
输出:
6
#include<cstdio>
#include<string>
#include<vector>
using namespace std;
vector<string> vec;
void com_subStr(string str1,string str2)
{
int l1=str1.size();
int l2=str2.size();
for(int i=0;i<l1;i++)
{
for(int j=0;j<l2;j++)
{
string temp="";
for(int k=j,t=i;k<l2;k++,t++)
{
if(str1[t]!=str2[k])
{
break;
}
temp.push_back(str1[t]);
}
vec.push_back(temp);
}
}
}
int main()
{
// 1.输入
char buf1[200];
char buf2[200];
fgets(buf1,200,stdin);
fgets(buf2,200,stdin);
string str1=buf1;
string str2=buf2;
str1.pop_back();
str2.pop_back();
// 2.查找公共子串
com_subStr(str1, str2);
// 3.找最长
int max=0;
for(int i=0;i<vec.size();i++)
{
if( max < vec[i].size())
{
max=vec[i].size();
}
}
// 4.输出
printf("%d",max);
}