删除指定目录

题目描述

我们定义一种目录结构字符串(类似Windows的 tree /f 的输出内容),用它来表达目录树的结构,如图所示:
在这里插入图片描述

目录结构字符串的输入仅含数字、字母和|-,其中:|- 表示子目录的层次符号;字母或数字组成目录名(字母大小写敏感)。
某一子目录挂接在其前面、最近的上一层目录下。
给定一组目录结构字符串,及待删除的目录名(不含路径)的列表,请按如下要求删除所有符合条件的目录:

仅叶子目录,且在待删除的目录名列表中,才可以被删除。
注意:某目录的子目录被全部删除后,也视为叶子目录。

请输出最终被删除的不同路径目录的个数;如果没有被删除的目录,则输出 0。

上图中,如果待删除目录的目录名为B Cpp,则输出 4;如果待删除的目录名为A,则输出 0。

解答要求

时间限制:1000ms, 内存限制:256MB

输入

第1行一个字符串,表示待删除的目录名的列表,多个目录名通过单空格分隔,字符串长度范围 [1,100];
第2行一个整数 num,表示给定目录结构字符串的行数,取值范围[1,50];
接下来 num 行字符串,表示给定的目录结构字符串,每行长度范围[1,100]。

用例保证,输入的目录结构是合法的;有且仅有一个根目录;除根目录外,所有目录都有对应的父目录。

输出

一个整数,表示被删除的目录的个数。

样例

输入样例 1

B Cpp
6
A
|-B
|-|-Cpp
|-|-B
|-|-|-B
|-lib32

输出样例 1

4

提示样例 1

A      // 根目录
|-B     // 第二层目录B,它前面最近的上一层目录为A,因此是A的子目录
|-|-Cpp   // 第三层目录Cpp,它前面最近的上一层目录为B,因此是第二层B的子目录
|-|-B    // 第三层目录B,它前面最近的上一层目录为B,因此是第二层B的子目录。
|-|-|-B    // 第四层目录B,是第三层B的子目录
|-lib32   // 第二层目录lib32,是A的子目录

删除目录名为 B 和 Cpp的目录:
目录 /A/B/Cpp 是叶子目录,需要被删除;
目录 /A/B/B/B 是叶子目录,需要被删除;然后/A/B/B 变成叶子目录,也需要被删除;
然后 /A/B也变成叶子目录,同样需要被删除。
共有 4 个目录被删除。

输入样例 2

A Java
5
A
|-a
|-|-A
|-A
|-|-A

输出样例 2

3

提示样例 2

共有 3 个目录(

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软软的铲屎官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值