题目描述:查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
首先找到a和b中最短的那个字符串。
这道题我觉得最巧妙的解法是利用了substr截取a中的字符串,每截取一部分就去b中查找,若在b中,就把最长的字符串保存起来。
另外需要注意的是find函数返回的是size_t类型的值,需要强转成int类型的。
具体代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a,b;
while(cin>> a >> b)
{
string maxstr;
if(a.size()>b.size())
swap(a,b);
for(int i=0;i<a.size();i++)
{
for(int j=i;j<a.size();j++)
{
string newstr=a.substr(i,j-i+1);
if(int(b.find(newstr))<0)
break;
else if(newstr.size()>maxstr.size())
maxstr=newstr;
}
}
cout<<maxstr<<endl;
}
return 0;
}