查找两个字符串a,b中的最长公共子串。

题目描述:查找两个字符串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;
}

 


版权声明:本文为yam_sunshine原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。