int con_sub(const string &str, string &ret)
{
int max_time = 0;//连续出现的最多次数
int ret_len = 0;//连续出现的字符串的长度
vector<string> strs;//连续出现字符串的起始地址
int len=str.length();
string strtemp;
//生成后缀数组
for(int i=0; i<len; i++)
strs.push_back(str.substr(i,len-1));
//重复字符串的长度范围为1到(len+1)/2
for(int i=1; i<=len; i++)
{
//当重复的字符串长度为i的时候,如果是连续出现的,那么第j和第j+i个后缀数组前面为重复的字符串
for(int j=0; j+i<=len-1; j+=i)
{
int k = j;
int temp_time = 1;
while(k+i <= len-1)
{
if(strs[k].substr(0,i)==strs[k+i].substr(0,i))
{
temp_time++;
k += i;
}
else
{
k += i;
}
}
if(temp_time > max_time)
{
max_time = temp_time;
ret_len = i;
strtemp = strs[j].substr(0,i);
}
}
}
ret = strtemp;
return max_time;
}
在借鉴别人的基础之上来写的其实有一些疑问还是假如,一个字符串中没有连续的也就是说都是单个出现的子串,本程序只是返回了其中一个,还有就是如果程序中出现两个字串出现的最多次数一样多,我们只返回其中一个。。。