用短串(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;
}