题面解释:
在Linux系统中,用户通过cd命令来切换工作目录。给定一个当前工作目录的绝对路径和一个相对路径命令,要求输出执行该命令后用户的新工作目录,且以最简洁的绝对路径形式表示,同时还需输出在命令执行过程中经过的最深目录层级数。输入包括当前工作目录的绝对路径和cd命令的相对路径,输出则包含用户新目录的绝对路径和最深层级数的两个数值。例如,若输入为/home/hello和cd .././/world/,则输出为/home/world和2,表示最终目录和经过的最深层级数。
思路
使用栈来模拟路径变化是通过利用栈的后进先出(LIFO)特性来实现文件系统的路径导航。首先,将当前路径和目标路径用“/”分割为路径片段,并依次处理。当前路径中的有效目录名依次入栈,表示进入对应的子目录;遇到“..”时,栈顶元素弹出,表示返回上一级目录。对于目标路径的处理,如果是有效目录,则入栈;如果是“..”,则弹出栈顶目录。在操作过程中,栈的最大深度反映了所到达的最大目录层级。
题解
P2304.第2题-绝对路径
题目内容
Linux系统中,绝对路径是从根目录开始的完整路径,即以'\'开头,相对路径是从当前工作目录开始的路径,以'.'、'..'或当前目录的子目录名开始。某用户便用'cd' 相对路径"的指令来切换工作目录,假设其使用的相对路径包含如下部分:
其他字符串均代表目录名,如'...'、'hello',且假设目录都存在;
请计算出用户在使用'cd 相对路径'指令后的工作目录,要求:
- 以绝对路径的形式输出,即以/开始;
- 以最简洁形式输出;最简洁形式指的是路径中没有冗余部分,即没有'.'、'..'、'//',不以'/'结尾;
另外,假设cd指令执行过程中,会依次进入每一级目录,请给出,经过的最深的目录的层级数,包括当前目录和最终目录,假设根目录'/'为0层。
输入描述
第一行为当前工作目录的绝对路径,为最简洁形式;字符数范围[1,100];
第二行为用户执行的cd相对路径命令,cd和相对路径之间有一个空格隔开,相对路径的字符数范围[1,100],注意cd和空格还有3个字符;
输出描述
第一行为用户执行'cd相对路径'指令后的当前工作目录,要求以最简洁的绝对路径形式输出。
第二行为指令过程中经过的最深目录层级数。
样例1
输入
/home/hello
cd .././/world/
输出
/home/world
2
说明
指令执行过程中进入的目录依次为:/home/hello、/home、/home/world,最终目录为/home/world,最深层次为2。
样例2
输入
/home/hello
cd world/.../../.
输出
/home/hello/world
4
说明
...也是合法目录名:
指令执行过程中进入的目录依次为:/home/hello、/home/hello/world、/home/hello/world/...、/home/hello/world,最终目录为/home/hello/world,最深层级为4
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写