求字符串中字母重叠的次数并按要求输出(笔试题)

题目描述:

给定一个字符串,求出字母重叠出现的次数,最后按字典格式输出。

输入示例:

aaabccbbbfffaddbaa

输出示例:

a : 5
b : 3
f : 3
c : 2
d : 2
解释:例如a-5,因为只计算aaa+aa,单个字母非重叠所以不计入结果

解题思路:

看到按字典格式输出条件反射性的要用到map,但是再次看输出示例,我有点懵了。这输出示例中呈现着怎样的字典格式呢??

内心OS:题目中abcdf输入出现的顺序是a,b,c,f,d,如果用map直接统计并输出那么理应是a,b,c,d,f(map特点-用key进行升序排列),但是输出示例中的的顺序却是a,b,f,c,d。

于是我又认真审题后发现,原来题目中的输出是按重叠的次数进行降序输出的。所以我们直接用map进行解题其结果必然不能通过。
因此解题的思路有以下两个可以参考:

  1. 用map统计后再用value进行倒序排列
  2. 先将重叠出现的字母都放在unordered_map<char,int>m中,再根据unordered_map中的value值进行排序,最后依次输出
难点在于:怎么根据map中的value值进行排序?

用value排序的主要思想是将map中的pair转存到vector中,再自己写一个比较函数 cmp,用< algorithm>中的sort(v.begin(),v.end(),cmp)对vector进行自己定义方法的排序,就可以完成根据value值对map排序。
具体实现如下:

 vector <pair<char, int>> vt;//1. 将map中数据构建成pair依次转存到vector中for (auto it = m.begin(); it != m.end(); it++)   vt.push_back(make_pair(it->first, it->second));//2. 下面使用sort对vector进行自定义排序,cmp函数用C++11中的lambda表达式替换sort(vt.begin(), vt.end(), [](const pair<char, int> &x, const pair<char, int> &y)->int{return x.second > y.second; });  //3. 用迭代器遍历并将pair值按指定格式依次输出for (auto it = vt.begin(); it != vt.end(); it++)cout << it->first << ":" << it->second << endl;

完整解题代码

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;void Rep(string s, unordered_map<char, int>& m)
{string ret;   //ret用于存放重叠的字母ret.push_back(s[0]);for (size_t i = 1; i<s.size(); i++){if (s[i] == ret[0])   //如果重叠要计入ret.push_back(s[i]);else{         if (ret.size()>1)   //当前不重叠但ret中有重叠{for (auto &e : ret)     //将ret中重叠字母依次放入map中m[e]++;}ret.clear();    //清空retret.push_back(s[i]);   //将当前字母放在ret中}}if (ret.size()>1)     //原字符串遍历完,ret中仍有重叠的字符串{for (auto &e : ret)    //继续移入map中m[e]++;}
}
int main()
{string s;cin >> s;unordered_map <char, int> um;Rep(s, um);   //计算重叠字母,并放在map中//将map中数据按value排序vector <pair<char, int>> vt;for (auto it = um.begin(); it != um.end(); it++)    vt.push_back(make_pair(it->first, it->second));sort(vt.begin(), vt.end(), [](const pair<char, int> &x, const pair<char, int> &y)->int{return x.second > y.second; });//按要求格式输出for (auto it = vt.begin(); it != vt.end(); it++)cout << it->first << ":" << it->second << endl;cout << endl;system("pause");return 0;
}


58同城另一编程题:求以字母d或e结尾的单词的个数

58同城秋招笔试题解答 --map模式按value进行排序相关推荐

  1. 凑硬币(58同城2017校招笔试题)

    凑硬币(58同城2017校招笔试题) 暴力破解,循环递归实现,代码如下: /** * 暴力破解,循环递归,找出了所有可能的组合并进行了存储,* 在循环递归的时候,因为选取的分类相互是有重叠的,生成的递 ...

  2. 字节跳动-2020秋招-笔试题剖析【5道算法题】

    字节跳动-2020秋招-笔试题剖析[5道算法题],限时120分钟. 让我们一起来看看这些题吧! 题一:模型文件去重 [题目描述] 抖音上不同的用户类型我们有不同的用户模型文件. 我们有一个模型配置文件 ...

  3. 2020大疆秋招笔试题B卷

    2020大疆秋招笔试题B卷 选择题(选项没抄下来)10道记了9道 1.关于常指针和指向常量的指针 2.多线程调用如下函数,a,b,c哪些需要加锁保护 int a = 0; void knit() {s ...

  4. 2021网易秋招笔试题(Android开发)

    网易笔试题(2021.08.08) 校招的笔试题通常是4道编程题,时间为2个小时,每题25分. 2021秋招笔试题总结如下,包含问题和代码实现. 题1:查找关键词 查找关键词(单词在文章中出现频率&g ...

  5. 腾讯 2015秋招笔试题 编程题2:九宫格填数

    腾讯 2015秋招笔试题 编程2:九宫格填数 题目 2: 有下图的题解,请用 C/C++ 代码来列出满足下图 0-100 内的所有答案. 配合加减乘除,使得九宫格横竖都等于4. 智力冲浪 数字推理 请 ...

  6. 酷狗java秋招笔试题

    酷狗java秋招笔试题 单选题 1.在命中率极高的缓存设计中,时间复杂度最差的数据结构是( B ). A. 数组 B. 链表 C. 树 D. 哈希表 2.某二叉树共有11个结点,其叶子结点只有2个.则 ...

  7. 字节跳动2020届秋招笔试题

    字节跳动2020届秋招第一批笔试题(2019.8.11) 文章目录 字节跳动2020届秋招第一批笔试题(`2019.8.11`) 第一题[编程题25分]: 闹钟叫醒去上课 第二题[编程题25分]: 秘 ...

  8. 2017酷家乐秋招笔试题——后台开发

    楼主,昨天晚上做了酷家乐的笔试题,本来发来说是19:00-21:00两个小时,结果登入考试系统发现倒计时只有一个小时(坑!).不过题量很少,主要是选择题和简答题,简答题有一道是要编程的,当时内心太慌没 ...

  9. 嵌入式软件工程师 秋招笔试题

    某半导体公司的笔试题,当时花在C语言上的时间太少,答得很不好,现在有时间就分析一下错题吧. 1.存储一个32位数0x12345678到0x1000H-0x1003H四个字节单元中,若以小端模式存储,则 ...

最新文章

  1. flume高可用-balance-配置文件编写
  2. (搬家文) c++引用深入探讨
  3. asp.net如何取得纯客户端控件的值
  4. java处理请求的流程_Java Spring mvc请求处理流程详解
  5. Python实例讲解 -- 认识wxpython 的 Frame
  6. window git安装 以及 tortoiseGit安装与使用
  7. mongoDB Error:not master and slaveOk=false
  8. 控制器(下) -运维笔记
  9. 大数据开发基础入门与项目实战(一)Java SE之4.方法和封装
  10. ReactNative运用插件react-native-amap-geolocation获取Android手机高德经纬度
  11. Docker容器获取宿主机信息
  12. 三维GIS与游戏引擎的跨界融合,打造数字化孪生的平行世界
  13. 华为p4不是鸿蒙吗怎么又改为安卓_华为已将“基于安卓10”变成“兼容安卓10”,EMUI就是鸿蒙OS...
  14. Ti437x LED裸机程序全解
  15. Arduino ESP8266/ESP32读取和改写MAC
  16. 网闸标底--网神G6150-C022
  17. MATLAB基于Randon变换的图像倾斜校正算法及实现
  18. 面试数据分析师岗位要注意的几点
  19. monkeyrunner的使用
  20. 史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了

热门文章

  1. springMVC中 Controller层为什么可以用map来传输数据
  2. 判断访问来源是pc端还是手机端
  3. 挖掘安卓宝藏,EMUI会让手机进入“量心定制”时代吗?
  4. 计算机信息管理专业论文初稿,学生信息管理系统论文-初稿.doc
  5. 个人日常工作管理软件有哪些?
  6. python 大众 同城
  7. 量子计算机和超导,量子计算的未来在哪里——超导电路与光子学
  8. 一文了解干簧管的用法
  9. 使用pyenv进行Python多版本控制
  10. 浅谈云函数的代理IP利用面