求一个字符串中连续出现次数最多的字串 c++实现方法

来源:互联网 发布:mac装office软件要钱吗 编辑:程序博客网 时间:2024/05/29 17:31

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;
}

////////////////////////////在借鉴别人的基础之上来写的其实有一些疑问还是假如,一个字符串中没有连续的也就是说都是单个出现的子串,本程序只是返回了其中一个,还有就是如果程序中出现两个字串出现的最多次数一样多,我们只返回其中一个。。。

0 0
原创粉丝点击