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

    C++

    使用hash map存储每个子串出现的次数

     1 #include <iostream>
     2 #include <vector>
     3 #include <unordered_map>
     4 using namespace std;
     5 
     6 pair<int, string> fun(const string& str) {
     7     int len = str.length();
     8     if (len == 0){
     9         return make_pair(0,string(""));
    10     }
    11     unordered_map<string, int> map(len*len);
    12 
    13     pair<int, string> ret = make_pair(1, str.substr(0,1));
    14 
    15     for (int i = 0; i < len; ++i) {
    16         for (int j = 1; j < len - i + 1; ++j) {
    17             string substr = str.substr(i,j);
    18             if (map.find(substr) == map.end()) {
    19                 map[substr] = 1;
    20             } else {
    21                 map[substr] += 1;
    22                 if (map[substr] > ret.first) {
    23                     ret = make_pair(map[substr], substr);
    24                 } else if (map[substr] == ret.first && substr.length() > ret.second.length()) {
    25                     ret = make_pair(map[substr], substr);
    26                 }
    27             }
    28         }
    29     }
    30     return ret;
    31 };
    32 int main()
    33 {
    34     string str = "zhanghaeha";
    35     pair<int, string> rs = fun(str);
    36     cout<<rs.second<<":"<<rs.first<<endl;
    37     return 0;
    38 }
  • 相关阅读:
    2016-02-24 工作日记
    金字塔培训
    你找到自己的路了么?
    你是个成熟的职场人么?
    码农十年总结
    码农十年连载六
    码农十年连载五
    码农十年连载四
    码农十年连载三
    码农十年连载二
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/5010973.html
Copyright © 2011-2022 走看看