#include <iostream>
using namespace std;
int main()
{
string str1,str2;
cin>>str1>>str2;
string s2;
int cnt=0;
//jingen
int l3=str1.length();
int l4=str2.length();
if(l3>l4)
{
string s=str1;
str1=str2;
str2=s;
}
int l1=str1.length();
int l2=str2.length();
for(int i=0;i<=l1;i++)
{
for(int j=0;j<=l2;j++)
{
string s1;
if(str1[i]==str2[j])
{
int k=i,p=j;
while(str1[k]==str2[p]&&k<l1&&p<l2)
{
s1+=str2[p];
k++,p++;
}
int r1=s1.length();
int r2=s2.length();
if(r1>r2) s2=s1;
}
}
}
cout<<s2;
return 0;
}
由题意可知此题寻找最长公共子串,且如果存在多个答案,输出在较短串中最先出现的那个。使更短的字符串为str1,另外一个为str2,两个for循环遍历两个字符串,若字符相同则往后看,s2更新最长的公共子串参与链接

京公网安备 11010502036488号