华为OD机试【全量和已占用字符集】(java)(100分)

1、题目描述

给定两个字符集合,一个是全量字符集,一个是已占用字符集,已占用字符集中的字符不能再使用。

2、输入描述

  1. 输入一个字符串 一定包含@,@前为全量字符集 @后的为已占用字符集;
  2. 已占用字符集中的字符一定是全量字符集中的字符;
  3. 字符集中的字符跟字符之间使用英文逗号隔开;
  4. 每个字符都表示为字符+数字的形式用英文冒号分隔,比如a:1标识一个a字符;
  5. 字符只考虑英文字母,区分大小写;
  6. 数字只考虑正整型,不超过100;
  7. 如果一个字符都没被占用 @标识仍存在,例如 a:3,b:5,c:2@

3、输出描述

  1. 输出可用字符集;
  2. 不同的输出字符集之间用回车换行;
  3. 注意 输出的字符顺序要跟输入的一致,如下面用例不能输出b:3,a:2,c:2;
  4. 如果某个字符已全部占用,则不需要再输出
    用例:
输入
a:3,b:5,c:2@a:1,b:2输出
a:2,b:3,c:2ps:
全量字符集为三个a,5个b,2个c
已占用字符集为1个a,2个b
由于已占用字符不能再使用
因此剩余可用字符为2个a,3个b,2个c
因此输出a:2,b:3,c:2

温馨提示!!!
华为OD机试考试官方会对考生代码查重。华为od机试因为有题库所以有很大的概率抽到原题。如果碰到了题库中的原题,千万不要直接使用题解中的代码,一定要做些修改,比如代码中的变量名,除此之外,代码的组织结构和逻辑也要进行一些改变,所以在日常的刷题中,要提前编写好属于自己的代码。

4、题解

本题简单,看代码。
代码如下:

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] arr = sc.nextLine().split("@");String[] allStrs = arr[0].split(",");String[] usedStrs = {};if (arr.length > 1) {usedStrs = arr[1].split(",");}Map<String, Integer> maps = new HashMap<>();// 全量字符转mapfor (String str : allStrs) {String[] tmp = str.split(":");String c = tmp[0];Integer num = Integer.parseInt(tmp[1]);maps.put(c, num);}// 过滤已用字符for (String str : usedStrs) {String[] tmp = str.split(":");int usedNum = Integer.parseInt(tmp[1]);int sub = maps.get(tmp[0]) - usedNum;if (sub == 0) {maps.remove(tmp[0]);}else {maps.put(tmp[0], sub);}}for (Map.Entry<String, Integer> entry : maps.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}
}

执行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681442.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

static静态成员变量和静态方法

当有new创建一个对象的,里面属性和方法,通过构造函数,能定义多个不同的对象,在我们做面向对象开发的时候,给一个场景,人在一个班级的时候,你的老师可能是固定的。 当我们用构造方法去构造的时候&#xff0c;每次都去传递一个固定的实参去定义个老师。 这样好会显得代码非常的…

(一)Linux的vim编辑器的使用

一.vim编辑器 Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 二…

Baidu Comate:智能编码,编程效率的革新者

文章目录 一、何为智能编码助手&#xff1f;二、Baidu Comate智能编码助手简介三、Baidu Comate注册四、Baidu Comate体验Comate插件功能1.注释生成代码2.函数注释生成3.行间注释生成4.生成代码解释5. 调优建议 五、插件功能的使用体验感受和建议 &#x1f6a9;结语 一、何为智…

Windows+Linux的虚拟串口工具

文章目录 1.Windows虚拟串口工具1.1 安装教程1.2 使用方法 2.Linux系统虚拟串口工具2.1 socat安装2.2 开启虚拟串口2.3 测试2.3.1 命令测试2.3.2 Cutecom工具测试 2.4 关闭虚拟串口 3.参考资料 1.Windows虚拟串口工具 下载地址&#xff1a;https://www.downxia.com/downinfo/4…

C++新特性

1 智能指针 1.1 为什么需要智能指针 智能指针主要解决以下问题&#xff1a; 内存泄漏&#xff1a;内存手动释放&#xff0c;使用智能指针可以自动释放共享所有权指针的传播和释放&#xff0c;比如多线程使用同一个对象时析构问题&#xff0c;比如&#xff1a; C里面的四个智…

MySQL数据库及数据表的创建

1.创建一个名叫 db_classes 的数据库&#xff1a; 创建一个叫 db_classes 的数据库MySQL命令&#xff1a; create database db_classes; 运行效果&#xff1a; 创建数据库后查看该数据库基本信息MySQL命令&#xff1a; show create database db_classes; 运行效果&#xff…

IT项目管理-大题【太原理工大学】

一、根据进度网络写出时间参数表、关键路径、总工期 此类题一般是给一个表&#xff0c;问三问。 第一问会问某个活动的时间参数&#xff0c;但我们需要把整个表都求出来&#xff0c;否则单求一个很困难&#xff08;如果你就是不想求整张表也行&#xff0c;不是硬性要求&#xf…

Isaac Sim 6 仅使用isaacsim中自带的工具进行语义分割、实例分割(学习笔记5.09)

一.概要 建立场景&#xff0c;给场景内的物体赋予语义&#xff0c;使用Replicator进行分割操作&#xff0c;从而获得带标签信息的mask掩码图&#xff0c;可作为数据集、验证集等训练使用。 二.具体操作步骤 场景部分 1.搭建一个基础场景 这里建议在搭建的时候就按类别分好类…

探索无界知识:用 ChatGPT 的原理学习任何事物!

为避免文章重复&#xff0c;您的文本已通过更改句式、用词以及句子结构进行了修改。现在的文本应该能更好地满足去重的需求&#xff1a; 从ChatGPT原理出发&#xff0c;我们探讨GPT如何启发人类学习和构建个人知识体系。 1. 明确学习目标 机器学习必须依靠目标函数。同样&…

【Android】Kotlin学习之数据容器(数组创建)

kotlin数组 数组是一种初始化时指定容器大小, 不可以动态调整其大小的容器 数组创建

重写muduo之Acceptor模块

目录 1、回顾 2、Acceptor 2.1 Socket 2.1.1 Socket.h 2.1.2 Socket.cc 2.2 Acceptor 2.2.1 Acceptor.h 2.2.2 Acceptor.cc 1、回顾 Channel、Poller、EPollPoller、EventLoop相当于Reactor模型中的Reactor反应堆和Demultiplex事件分发器 Thread、EventLoopThread、Ev…