• 全量和已占用字符集


    题目描述

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

    输入描述

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

    • 2.已占用字符集中的字符一定是全量字符集中的字符

    • 3.字符集中的字符跟字符之间使用英文逗号隔开

    • 4.每个字符都表示为字符+数字的形式用英文冒号分隔,比如a:1标识一个a字符

    • 5.字符只考虑英文字母,区分大小写

    • 6.数字只考虑正整型不超过100

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

    输出描述

    • 输出可用字符集
    • 不同的输出字符集之间用回车换行
    • 注意输出的字符顺序要跟输入的一致,如下面用例不能输出b:3,a:2,c:2

    • 如果某个字符已全部占用则不需要再输出

    用例

    输入

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

    输出

    a:2,b:3,C:2
    说明
    · 全量字符集为三个a,5个b,2个c
    · 已占用字符集为1个a,2个b
    · 由于已占用字符不能再使用
    · 因此剩余可用字符为2个a,3个b,2个c
    · 因此输出a:2,b:3,c:2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    题目解析

    解题思路

    先遍历@前的数据,将全量数据放入map中,再遍历@后的数据,更新map中的值
    数据存储
    将全量数据存储在map结构中
    ② 数据处理
    遍历已占用的字符,更新map的value值

    java实现

    package com.HW;
    
    import java.util.HashMap;
    
    /**
     * @ClassName : TFullAndOccCharSet
     * @Author : kele
     * @Date: 2023/10/22 14:12
     * @Description : 全量和已占用字符集
     */
    public class TFullAndOccCharSet {
    
        public static void main(String[] args) {
    
            String s = "a:3,b:5,c:2@a:1,b:2";
            handle(s);
    
        }
    
        public static void handle(String str) {
    
            String[] split = str.split("@");
            StringBuilder builder = new StringBuilder();
            if(split.length == 0){
                System.out.println("");
            } else if(split.length == 1) {
                System.out.println(split[0]);
            }else{
    
                HashMap<String, Integer> map = new HashMap<>();
                for (String s : split[0].split(",")) {
                    String[] charSet = s.split(":");
                    map.put(charSet[0],Integer.parseInt(charSet[1]));
                }
    
                for (String s : split[1].split(",")) {
                    String[] charSet = s.split(":");
                    String key = charSet[0];
                    int value = map.get(key) - Integer.parseInt(charSet[1]);
                    if(value == 0){
                        map.remove(key);
                    }else{
                        map.put(key,value);
                    }
                }
    
                map.entrySet().forEach(x-> builder.append(x.getKey()).append(":").append(x.getValue()).append(","));
    
                System.out.println(builder.substring(0,builder.length()-1));
    
            }
    
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    table表格初始化根据字段数字排序,table表格进入后返回上一级设置,第一级隐藏
    深入探究ASEMI肖特基二极管MBR60100PT的材质
    一篇搞懂BFC
    前端开发攻略---合并表格单元格,表格内嵌套表格实现手风琴效果。
    力扣每日一题:1822:数组元素积的符号【模拟思维题】
    Java反射机制详解--Java
    Django之VScode工程搭建
    【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错
    docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)
    71-Java的包装类、正则表达式、Arrays
  • 原文地址:https://blog.csdn.net/qq_38705144/article/details/133972925