当前位置: 首页 > news >正文

【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现

目录

题目描述:

示例1

代码实现:


【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现

题目描述:

给定两个字符集合,一个为全量字符集,一个为已占用字符集。已占用的字符集中的字符不能再使用,要求输出剩余可用字符集。

输入描述

1、输入为一个字符串,一定包含@符号。@前的为全量字符集,@后的字为已占用字符集。

2、已占用字符集中的字符一定是全量字符集中的字符。字符集中的字符跟字符之间使用英文逗号分隔。

3、每个字符都表示为字符加数字的形式,用英文冒号分隔,比如a:1,表示1个a字符。

4、字符只考虑英文字母,区分大小写,数字只考虑正整形,数量不超过100。

5、如果一个字符都没被占用,@标识仍然存在,例如a:3,b:5,c:2@

输出描述

输出可用字符集,不同的输出字符集之间回车换行。

注意,输出的字符顺序要跟输入一致。不能输出b:3,a:2,c:2

如果某个字符已全被占用,不需要再输出。

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

a:3,b:5,c:2@a:1,b:2

输出

a:2,b:3,c:2

说明

全量字符集为3个a,5个b,2个c。

已占用字符集为1个a,2个b。

由于已占用字符不能再使用,因此,剩余可用字符为2个a,3个b,2个c。

因此输出a:2,b:3,c:2

代码实现:

#include <string>
#include <map>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <vector>using namespace std;class SData {
public:char k;int cnt;int size;bool operator<(const SData &other) const {return size < other.size;}SData(char key = 0, int cnt = 0, int len = 0) : k(key), cnt(cnt), size(len) {}
};class Solution {public:Solution(const string &s) {int idx = s.find('@');if (idx == string::npos) {dealData(s, false);}else {dealData(s.substr(0, idx), false);dealData(s.substr(idx + 1), true);}vector<SData> tmp(m_data.size());m_vsd = tmp;for (auto &item : m_data) {m_vsd.push_back(item.second);}calc();}string out() const {return m_res;}
private:void calc() {sort(m_vsd.begin(), m_vsd.end());for (auto &e : m_vsd) {if (e.cnt > 0) {m_res.push_back(e.k);m_res.append(":").append(to_string(e.cnt)).append(",");}}m_res.pop_back();}void dealData(const string &s, bool fg) {if (s.empty()) {return;}istringstream ss(s);int size = 0, cnt;char k;while (ss >> k >> cnt) {if (fg) {m_data[k].cnt -= cnt;}else {m_data[k] = { k, cnt, size++ };}}}vector<SData> m_vsd;string m_res;map<char, SData> m_data;
};int main() {string lineStr;getline(cin, lineStr);replace_if(lineStr.begin(), lineStr.end(), [](char c) { return c == ':' || c == ','; }, ' ');Solution so(lineStr);cout << so.out() << endl;return 0;
}

相关文章:

  • 记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
  • 千云物流 - 使用k8s负载均衡openelb
  • 【Spring源码】Spring Event事件
  • 如何给echarts的legend设置不同的样式和位置 legend分组显示
  • 备考雅思记录
  • u8g2图形库——丝滑菜单制作
  • Linux系统常用指令大全(图文详解)
  • 发布鸿蒙的第一个java应用
  • 什么是索引?索引的作用是什么?
  • app小程序定制的重点|软件定制开发|网站搭建
  • 你了解Postman 变量吗?
  • DeepWalk代码实战-维基百科词条图嵌入可视化
  • pcie-2-rj45速度优化
  • 【数据结构】动态顺序表详解
  • 【科普知识】什么是步进电机?
  • ----------
  • 2017届校招提前批面试回顾
  • angular2开源库收集
  • es6--symbol
  • fetch 从初识到应用
  • gulp 教程
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JS数组方法汇总
  • magento2项目上线注意事项
  • mongodb--安装和初步使用教程
  • Mysql5.6主从复制
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • WePY 在小程序性能调优上做出的探究
  • 百度小程序遇到的问题
  • 基于遗传算法的优化问题求解
  • 学习ES6 变量的解构赋值
  • 用jquery写贪吃蛇
  • 栈实现走出迷宫(C++)
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (27)4.8 习题课
  • (31)对象的克隆
  • (5)STL算法之复制
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 事件模型教程(二)
  • .net程序集学习心得
  • .NET连接数据库方式
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .Net中wcf服务生成及调用
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .net中的Queue和Stack
  • ::before和::after 常见的用法
  • :如何用SQL脚本保存存储过程返回的结果集
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用