📜  门|门 CS 1999 |问题 29(1)

📅  最后修改于: 2023-12-03 15:12:46.224000             🧑  作者: Mango

门|门 CS 1999 |问题 29

本题为嵌套较多的字符串处理题目,要求学生实现一个函数,将给定字符串处理成特定格式。

题目描述

在一个门口,有个人不停地开门,有些人进门,有些人出门。门口的记录经过了一位工作人员的整理,现在记录下来了一段时间内的开门情况,请你将它整理成以下格式:

  • 对于每一次开门操作,如果是进门,则输出一行 in XXX,其中 XXX 是进门人员的姓名;
  • 如果是出门,则输出一行 out XXX,其中 XXX 是出门人员的姓名。

输入:字符串 S,S 中每一行表示一次开门操作,由一个大写字母 I 或 O 和一个人的姓名组成,中间用一个空格隔开。

输出:按照要求整理后的字符串。

输入格式

第一行是整数 N,表示记录的条数。

接下来 N 行,每行一个字符串,表示一次开门操作。其中第一个字符为大写字母 I 或 O,表示进门或出门,后面跟着空格和人名,人名为一个不超过 20 个字符的字符串,中间没有空格。

输出格式

输出整理后的字符串,每个操作占一行。

样例输入
9
I Alice
O Bob
I Carol
I Dave
O Carol
O Dave
I Eve
I Frank
O Alice
样例输出
in Alice
out Bob
in Carol
in Dave
out Carol
out Dave
in Eve
in Frank
out Alice
解题思路

题目给出的输入格式中,每个字符串都有两部分组成:一个字母表示进门或出门(I 或 O),以及一个字符串表示人名。我们可以使用字符串的 split() 方法将每条记录切分成这两个部分,然后按照题目要求拼接成合适的字符串。

步骤如下:

  1. 遍历输入中的每一条记录,使用 split() 方法将其切分成 ['I/O', 'name'] 的形式。
  2. 根据第一个字符串的首字母,判断是进门还是出门,构造出合适的输出字符串。
  3. 将每条记录构造出来的字符串按照原先输入的顺序输出即可。

下面是 Python 的参考代码:

def format_door_records(S):
    res = []
    for record in S:
        operation, name = record.split()
        if operation == 'I':
            res.append('in ' + name)
        else:
            res.append('out ' + name)
    return res
复杂度分析

这道题只要简单地遍历所有记录一遍,时间复杂度为 $O(N)$,其中 $N$ 是记录条数。由于只需要保存输出字符串,空间复杂度也为 $O(N)$。实际上,这个算法的常数较小,可以通过本题。