题目描述
查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。
输入描述:
输入两个字符串
输出描述:
返回重复出现的字符
输入例子:
abcdefghijklmnop abcsafjklmnopqrstuvw
输出例子:
jklmnop
#include <iostream>
using namespace std;
int main()
{
string str1,str2;
while(cin>>str1>>str2){
int size1=str1.size();
int size2=str2.size();
string maxSubstr;
if(size1<=size2){
for(int len=size1;len>0;len--){
for(int i=0;i<=size1-len;i++){
string subStr=str1.substr(i,len);
if(str2.find(subStr)!=string::npos){
maxSubstr=subStr;
goto MAXSTR;
}
}
}
}
else{
for(int len=size2;len>0;len--){
for(int i=0;i<=size2-len;i++){
string subStr=str2.substr(i,len);
if(str1.find(subStr)!=string::npos){
maxSubstr=subStr;
goto MAXSTR;
}
}
}
}
MAXSTR:
cout<<maxSubstr<<endl;
}
return 0;
}
另外,这题是道经典的动态规划例题,先mark下,后面学习了再补DP解法。