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

    分析:首先生成后缀数组

     1 //求一个字符串中连续出现次数最多的子串
     2 
     3 #include "stdafx.h"
     4 #include <iostream>
     5 #include <vector>
     6 #include <string>
     7 using namespace std;
     8 
     9 pair<int,string> fun(const string &str)
    10 {
    11     vector<string> subStrs;
    12     int maxcount=1,count=1;
    13     string subStr;
    14     int i,len=str.length();
    15     for(i=0;i<len;i++)    //生成后缀数组
    16         subStrs.push_back(str.substr(i,len-i));
    17     for(i=0;i<len;i++)
    18     {
    19         for(int j=i+1;j<len;j++)
    20         {
    21             count=1;
    22             if(subStrs[i].substr(0,j-i)==subStrs[j].substr(0,j-i))
    23             {
    24                 ++count;
    25                 for(int k=j+(j-i);k<len;k+=j-i)//间隔(j-i)个字母后,看是否重复出现,重复出现则连续
    26                 {
    27                     if(subStrs[i].substr(0,j-i)==subStrs[k].substr(0,j-i))
    28                         ++count;
    29                     else 
    30                         break;
    31                 }
    32                 if(count>maxcount)
    33                 {
    34                     maxcount=count;
    35                     subStr=subStrs[i].substr(0,j-i);
    36                 }
    37             }
    38         }
    39     }
    40     return make_pair(maxcount,subStr);
    41 
    42 }
    43 
    44 
    45 int _tmain(int argc, _TCHAR* argv[])
    46 {
    47     string str;
    48     pair<int,string> rs;
    49     while(cin>>str)
    50     {
    51         rs=fun(str);
    52         cout<<rs.second<<":"<<rs.first<<"
    ";
    53     }
    54     return 0;
    55 }

    然后再逐渐缩小字符子串来得出正确的结果

      subStrs[0]比subStrs[1]多了一个字母,如果说存在连续匹配的字符,那么
      subStrs[0]的第1个字母要跟subStrs[1]首字母匹配,同理
      subStrs[0]的前2个字母要跟subStrs[2]的前2个字母匹配(否则不能叫连续匹配)
      subStrs[0]的前n个字母要跟subStrs[n]的前n个字母匹配.
     如果匹配的并记下匹配次数.如此可以求得最长连续匹配子串. 
  • 相关阅读:
    js数组删除数组元素!
    ASP.NET安全问题--ASP.NET安全架构
    片滚动插件myScroll
    JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari
    poj_2386_dfs
    poj_1852_Ants(复杂问题简单化)
    File Mapping
    Creating a File View
    next_permutation
    Creating a File Mapping Object
  • 原文地址:https://www.cnblogs.com/Mikuroro/p/4570212.html
Copyright © 2011-2022 走看看