基本算法描述: 给出一个字符串abababa 1.穷举出所有的后缀子串 substrs[0] = abababa; substrs[1] = bababa; substrs[2] = ababa; substrs[3] = baba; substrs[4] = aba; substrs[5] = ba; substrs[6] = a; 2.然后进行比较 substrs[0]比substrs[1]多了一个字母,如果说存在连续匹配的字符,那么 substrs[0]的第1个字母要跟substrs[1]首字母匹配,同理 substrs[0]的前2个字母要跟substrs[2]的前2个字母匹配(否则不能叫连续匹配) substrs[0]的前n个字母要跟substrs[n]的前n个字母匹配. 如果匹配的并记下匹配次数.如此可以求得最长连续匹配子串.
#include<iostream>
#include<limits>
#include<vector>
#include<fstream>
using namespace std;
pair<string,int> func(const string& str) {
size_t len=str.size();
vector<string> vecs(str.size());
for(size_t i=0; i<str.size(); ++i) {
vecs[i]=str.substr(i,str.size()-i);
}
string res=str;
int max=1;
int count=0;
for(int i=len-1; i>=0; --i) {
count=1;
for(int j=i-1; j>=0; --j)
if(vecs[j].substr(0,vecs[i].size())==vecs[i]) {
count++;
}
if(count>max) {
max=count;
res=vecs[i];
}
}
return make_pair<string,int>(res,max);
}
int main(int argc, char** argv) {
pair<string,int> res= func("abababa");
cout<<res.first<<endl;
cout<<res.second<<endl;
return 0;
}