每日算法-輸入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[-1] == '/':
E=E[0:-1]
if E[0] != '/':
E='/'+ E
print(E)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM