每日算法-输入Linux中的合法全路径将其格式化

Linux系统中,文件全路径以”/”开头和作为分隔符,开头的”/”为根目录,作为分隔符的”/”表示一层目录。

以文件全路径”/a/b/file.c”为例

‘a’为根目录’/’下的子目录

‘b’为目录’a’下的子目录

‘file.c’为目录’/a/b’下的子文件

合法的全路径包含元素

 允许出现多个连续的”/”,与一个”/”等价,例如”////a”表示目录’/a’

允许出现特殊目录 “.” “..” 其中”.”表示当前层次,”..”表示当前层次的父目录(根目录的父目录为根) 格式化的全路径有一下要求:以’/’开头,存在连续的’/’

不存在特殊目录 “.” “..”默认转化为等价目录

不以”/”结尾(根目录除外,根目录的全路径输出为”/”)

比如合法全路径”/a///b/c/../././”的格式化全路径为”/a/b”

预期:输入一个合法全路径,转化并打印其格式化全路径

解题思路:

1.把..替换为*防止误伤

2.把所有的./替换为/    

3.把所有//替换为/直到字符串中没有//

4.用/切割成list。

5.如果存在..(*)的话,且不为第二个,则删除list里面的..和前一个索引对应的值,如果为第二个的话则删除本身即可

6.如果list为空则输出”/”,否则将list里面的值取出来用/拼接就是最后答案了 

 

Python3代码如下:

A=input()
B=A.replace('..','*')
C=B.replace('./','/')
while '//' in C:
    C=C.replace('//','/')
D=C.split('/')
while '*' in D:
    index1=D.index('*')
    if index1 != 0:
        D.remove(D[index1])
        D.remove(D[index1-1])
    else:
        D.remove(D[index1])
E='/'.join(D)
if len(E) == 0 :
    print('/')
else:
    if E[0] != '/':
        print('/'+E)
    else:
        print(E)

 

上一篇:力扣题11盛做多水的容器


下一篇:Leetcode 350. 两个数组的交集 II