用短串(str1)做外层循环,由于题目是找最长的公共子串,所以在长串里find短串所有的子串(按从长到短,最长是自身,最短是每个字符),第一个在长串里find成功的就是二者最长的公共子串了。.......懒得想怎么跳出循环了直接全部存入vector,输出第一个。
#include <bits/stdc++.h>
using namespace std;
int main ()
{
string str1,str2,tmp;
cin>>str1>>str2;
if(str1.size() > str2.size()) //str1为较短串,作外层循环
{tmp = str1;str1 = str2; str2 = tmp;}
vector<string> Vtmp; //用来存储所有的公共子串
for(int i = str1.size(); i > 0; i--)
{
for(int j = 0; j<= str1.size()-i; j++)
{
tmp = str1.substr(j,i);
//cout<<tmp<<' ';
if(str2.find(tmp) != -1) //find函数 找到目标字符(串)返回首字符位置,找不到返回-1
Vtmp.push_back(tmp); //找到压入Vtmp,找不到接着找str1下一个子串。
}
}
if(!Vtmp.empty())
cout<<Vtmp[0];
return 0;
}

京公网安备 11010502036488号