两个字符串的最大公共子串
给定一个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; } }