首页 > 试题广场 >

参数与艺术

[编程题]参数与艺术
  • 热度指数:311 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
为了确保智加科技的智能驾驶重卡能够满足各类运输要求,工程师阿文跟着测试车队开始了在中国国道上的驰骋,他敏锐的发现其车辆的参数配置文件采用带有相对路径的树状层次结构进行组织,如以下结构所示(缩进为两个空格字符):
/P1:v1
  Q1:v2
    R1:v3
    R2:v4
/P2:v5
那么,随着测试以及量产车辆的增多需要使用集中式的参数服务器来管理配置,这也意味着将原有的配置文件导入到参数服务器在参数服务器中,参数采用Key-Value的形式进行组织。需将上述格式的配置文件转化成如下形式:
/P1:v1
/P1/Q1:v2
/P1/Q1/R1:v3
/P1/Q1/R2:v4
/P2:v5
请用程序实现以上过程输入为原始带有相对路径的配置文件,输出为平铺展开的配置文件。


输入描述:
输入为层次结构配置文件读入到内存的字符串。


输出描述:
输出为平铺完的字符串。
示例1

输入

/P1:v1
  Q1:v2
    R1:v3
    R2:v4
/P2:v5
#

输出

/P1:v1
/P1/Q1:v2
/P1/Q1/R1:v3
/P1/Q1/R2:v4
/P2:v5
#
示例2

输入

/P1:
  Q1:v2
#

输出

/P1/Q1:v2
#
示例3

输入

/P1:
#

输出

#

备注:
1. 输入的所有字符均为英文字符。
2. 每一行字符串中间和结尾均没有多余的空格字符。
3. 输入和输出数据没有空白行。
4. Key-Value模式的结果中没有空字符串的value。
5. 为了方便在线judge,在输入输出的字符的结尾都增加一个“#”字符。

模拟

用一个栈按深度从小到大的顺序保存上级所有目录,按输入顺序遍历路径,如果当前路径的深度比上一条大,直接拼接上前缀;否则弹栈退回到同层级目录后再拼接前缀。
line = input()
prefix = []      # 路径前缀
prevDepth = 0
while line != "#":
    lstripLine = line.lstrip()
    depth = (len(line) - len(lstripLine)) >> 1
    if depth == 0:
        prefix.clear()      # 前面没有空格,当前是第0层目录,重新开启前缀
    elif depth <= prevDepth:
        d = depth
        while d <= prevDepth:
            prefix.pop()        # 当前目录不比上一条的级别低,则返回上级
            d += 1
    prevDepth = depth
    pair = lstripLine.split(":")
    prefix.append(pair[0])
    if pair[1]:
        print("/".join(prefix) + ":" + pair[1])
    line = input()
print("#")

发表于 2022-04-08 13:15:09 回复(0)

热门推荐

通过挑战的用户