题目描述
输入两个字符串 s 1 , s 2 s1,s2 s1,s2。
输出最长连续公共子串长度和最长连续公共子串。
输入格式
一行,两个字符串 s 1 , s 2 s1,s2 s1,s2,用空格隔开。
输出格式
第一行输出最长连续公共子串的长度
第二行输出最长连续公共子串。如果不唯一,则输出 s 1 s1 s1 中的最后一个。
数据范围
1
≤
∣
s
1
∣
,
∣
s
2
∣
≤
100
1≤|s1|,|s2|≤100
1≤∣s1∣,∣s2∣≤100
数据保证至少存在一个连续公共子串。
输入样例:
abcdefg qwercdefiok
输出样例:
4
cdef
找到a,b两个字符串的最小长度,枚举最小长度到1,由于“如果不唯一,则输出s1中的最后一个”。所以我们从后往前枚举每次len个长度的字符串。
代码如下
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
string ans;
for(int len=min(a.size(),b.size());len>=1;len--)//匹配的长度
{
for(int i=a.size()-len;i>=0;i--)
{
for(int j=b.size()-len;j>=0;j--)
{
string s1=a.substr(i,len);
string s2=b.substr(j,len);
if(s1==s2)
{
ans=s1;
break;
}
}
if(ans.size()) break;
}
if(ans.size()) break;
}
cout<<ans.size()<<endl;
cout<<ans<<endl;
return 0;
}