zoukankan      html  css  js  c++  java
  • 求一个字符串中连续出现次数最多的子串

     1 #include<iostream>
     2 #include<string>
     3 #include<vector>
     4 using namespace std;
     5 string my_string(string s,int &count)
     6 {
     7     vector<string> p;
     8     vector<int>result_cnt;
     9     vector<string>result_str;
    10     for(int i=0;i<s.length();i++)
    11     {
    12         string temp(s.begin()+i,s.end());
    13         p.push_back(temp);
    14     }
    15 
    16     int M=(s.length()+1)/2;
    17     for(int j=1;j<=M;j++)
    18     {
    19         vector<int> sum;
    20         for(int k=0;k<p.size()-1;k++)
    21         {
    22             
    23             int flag=1;
    24             int q=k;
    25             while(1)
    26             {
    27                 if(p[q].size()<j)
    28                     break;
    29                 else
    30                 {
    31                     string s1(p[q].begin(),p[q].begin()+j);
    32                 
    33                     if(q+j>=p.size() || p[q+j].size()<j)
    34                         break;
    35                     else
    36                     {
    37                         string s2(p[q+j].begin(),p[q+j].begin()+j);
    38                 
    39                         if(s1==s2)
    40                         {
    41                             q+=j;
    42                             flag++;
    43                         }
    44                         else
    45                             break;
    46                     }
    47                 }
    48             }
    49             sum.push_back(flag);
    50         }
    51         int max=sum[0],index=0;
    52         for(int t=1;t<sum.size();t++)
    53         {
    54             if(sum[t]>max)
    55             {
    56                 max=sum[t];
    57                 index=t;
    58             }
    59         }
    60         string ss(p[index].begin(),p[index].begin()+j);
    61         result_cnt.push_back(max);
    62         result_str.push_back(ss);
    63     }
    64     int id=0;
    65     count=result_cnt[0];
    66     for(int z=1;z<result_cnt.size();z++)
    67     {
    68         if(result_cnt[z]>count)
    69         {
    70             count=result_cnt[z];
    71             id=z;
    72         }
    73     }
    74     return result_str[id];
    75 }
    76 int main()
    77 {
    78     string s="abababcbcbcbcbcbcdef";
    79     int count=0;
    80     string x;
    81     x=my_string(s,count);
    82     cout<<x<<endl;
    83     cout<<count<<endl;
    84     system("pause");
    85     return 0;
    86 }
  • 相关阅读:
    软件测试 测试路径覆盖
    软件测试Lab Junit&Eclemma
    软件项目管理 名词解释
    使用 async/ await 进行 异步 编程
    基于任务的编程模型TAP
    异步编程(二)基于事件的异步编程模式 (EAP)
    C# 异步编程学习(一)
    C# 设计模式
    C# 读取硬盘信息 ManagementClass类
    C# show和showdialog区别
  • 原文地址:https://www.cnblogs.com/riden/p/4664834.html
Copyright © 2011-2022 走看看