area-h-p

给定两个字符串,找出最长公共子串,并返回该子串,如果不存在则返回-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;
}

 运行一下

 

 

 

分类:

技术点:

相关文章: