📌  相关文章
📜  门| Sudo GATE 2020 Mock I(2019 年 12 月 27 日)|第 65 题(1)

📅  最后修改于: 2023-12-03 14:58:34.167000             🧑  作者: Mango

介绍门禁系统

门禁系统是一种具有安全保障功能的设备,可以控制人员出入某个场所。门禁系统通常包括门禁机、读卡器、控制器、门磁、电源等组件。门禁系统不仅能够限制不合法进入,还能够记录出入者的时间、地点等信息,比较适用于需要进行进出管理的场所。

关于题目

题目:给定一串字符串,代表一个门禁系统,求出这个门禁系统里有多少人进出了这个场所。

示例:

a b c d E A C e D b A

输出:2

解题思路

由于该门禁系统只记录出入者的名字,而不记录他们进入或离开的时间,因此需要借助额外的数据结构来帮助我们解决这个问题。

对于该门禁系统,我们可以开辟一个 HashSet 或者 TreeMap(使用 TreeSet) 来存储其中的人员名单。遍历整个门禁系统的字符串,对于每一个人员名字,首先判断他们是否已经在 HashSet 或者 TreeSet 中存在,如果存在则表明这个人已经进入场所,需要将 HashSet 或者 TreeSet 删除该名字。如果该名字不存在,在 HashSet 或者 TreeSet 中添加该名字,表明这个人已经成功进入场所。

最终,HashSet 或 TreeSet 中剩下的人员名字数量就是从场所中进去的人员的数量,也就是所求答案。

代码如下:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        Set<String> set = new HashSet<>();
        for (String s : input.split(" ")) {
            if (set.contains(s)) {
                set.remove(s);
            } else {
                set.add(s);
            }
        }
        System.out.println(set.size());
    }
}

解释:

首先,我们导入了 java.util.HashSet、java.util.Scanner、java.util.Set 三个类库。其中,HashSet 是实现了 Set 接口的一个无序的集合类,使用散列表来存储。Scanner 则是一个简单的文本扫描器,可以从一些字符流中创建连续的符合指定格式的文本。Set 则是一个 Java API 中继承自 Collection 接口的接口,用于存储不重复的元素。

然后,我们定义了一个名为 Main 的类,并且在其中添加了一个 main 方法。在 main 方法中,我们首先使用 Scanner 读入一行字符串,并将其存储在 input 变量中。接下来,我们定义了一个名为 set 的 HashSet(或 TreeSet),用于存储进出人员名单。

然后,我们对 input 进行了 split 分割操作,将其拆分成一个个人员名字,并使用 for-each 循环逐一判断,对于每个人员名字,如果该名字已经在 set 中存在,则表明该名字表示的人员已经离开场所,因此我们需要将该名字从 set 中删除;如果该名字不存在于 set 中,则表明该名字表示的人员进入了场所,因此我们需要将该名字加入到 set 中。

最后,我们打印 set 中剩下的人员名字数量,也就是从场所中进去的人员数量,即为所求答案。