两个字符串的最大公共子串

给定一个query  和一个text , 均由小写字母组成,要求在text 中找出以同样的顺序连续出现在query中的最长连续字母的序列,例如

query 为“acbac", text 为 ”acaccbabb“,那么text 中的”cba“为最长的连续出现在query中的字母序列。

 

#include <iostream>
#include <string>
#include <algorithm>
#include <limits.h>
using namespace std;
string  FindMAxSubString( string a ,string b);
int main()
{
    
    string a ="acbac";
    string b="acaccbabb";
    cout<<FindMAxSubString(a,b)<<endl;
    return 0;
}

string   FindMAxSubString( string a ,string b)
{
     string res = "";
     string shorter = a.length()>b.length()? b:a;
     string longer = a.length()>b.length()? a:b;

     int maxlen =0;
     int maxpos =-1;
     for(int i =0; i<shorter.length();i++){
        for(int j =0;j<longer.length();j++)
        {
            if(shorter[i]==longer[j])
            {
                int k =1;
                for(;(shorter[i+k]==longer[j+k])&& i+k<shorter.length();k++);
                if(k>maxlen){
                    maxpos =i;
                    maxlen =k;
                }
            }
        }
     }

     if(maxpos==-1)
        return res;
     else
     {
         res=shorter.substr(maxpos,maxlen);
         return res;
     }

}

  

posted @ 2015-08-22 21:01  deanlan  阅读(1020)  评论(0编辑  收藏  举报