给定两个字符串,找出最长公共子串,并返回该子串,如果不存在则返回-1.
示例输入
abcdefg abcbcdefg
示例输出
bcdefg
示例输入
zxcvbnm asdfghjkl
示例输出
-1
#include<iostream>
#include<algorithm>
using namespace std;
string func(string str1, string str2)
{
string res;
int max_len = 0, ar[2] = {0,0};
for(int i=0; i<str1.length(); ++i)//每次都是以str1的第i个字符对str2进行遍历
{
for(int j=0; j<str2.length(); ++j)
{
int len = 0, tmp = i;
while(str1[tmp]!=str2[j] && j<str2.length())//找到第一个相同的字符
++j;
if(j == str2.length())
break;
while(str1[tmp]==str2[j] && tmp<str1.length() && j<str2.length())//看一下后续是否相同
{
++tmp, ++j, ++len;
}
if(len > max_len)
{
max_len = len;
ar[0] = tmp-len;
ar[1] = tmp;
}
}
}
if(max_len == 0)
return "-1";
else
return res=str1.substr(ar[0], ar[1]);
}
int main()
{
string str1, str2, res;
cin>>str1>>str2;
res = func(str1, str2);
cout<<res<<endl;
return 0;
}
运行一下