Giả sử chúng ta có một đường dẫn tuyệt đối cho một tệp (như hệ thống tệp Unix), chúng ta cần đơn giản hóa nó. Nói cách khác, chúng ta phải chuyển đổi nó thành đường dẫn chuẩn (canonical path). Trong hệ thống tệp kiểu UNIX, dấu chấm đơn '.' chỉ thư mục hiện tại. Dấu chấm kép '..' di chuyển lên một cấp thư mục (thư mục cha). Các đặc điểm của đường dẫn chuẩn như sau:
- Đường dẫn phải luôn bắt đầu bằng dấu gạch chéo
/ - Chỉ được có một dấu gạch chéo
/duy nhất giữa hai tên thư mục. - Tên thư mục cuối cùng (nếu có) không được kết thúc bằng dấu gạch chéo
/. - Đường dẫn chuẩn phải là chuỗi ngắn nhất biểu diễn đường dẫn tuyệt đối.
Ví dụ, nếu các đường dẫn cho trước là "/home/", "/../" và "/home//user/", thì các đường dẫn chuyển đổi tương ứng là "/home", "/" và "/home/user".
Các bước thực hiện
- Tạo danh sách
st, đưa'/'vào đó. a:= danh sách các chuỗi sau khi tách đường dẫn cho trước theo dấu phân cách'/'.- Với mỗi phần tử
itronga:- Nếu
ilà dấu chấm kép ('..'):- Nếu độ dài của
st> 1, xóa phần tử cuối khỏist, ngược lại tiếp tục.
- Nếu độ dài của
- Ngược lại nếu
ilà dấu chấm đơn ('.'), tiếp tục. - Ngược lại nếu
ikhông phải chuỗi rỗng, chèn ('/'nối vớii) vàost.
- Nếu
- Nếu
stchỉ có một phần tử, trả về'/'. - Trả về chuỗi sau khi nối tất cả các phần tử trong
st.
Ví dụ minh họa
class Solution:
def simplifyPath(self, a):
st = ['/']
a = a.split("/")
for i in a:
if i == '..':
if len(st) > 1:
st.pop()
else:
continue
elif i == '.':
continue
elif i != '':
st.append("/" + str(i))
if len(st) == 1:
return "/"
return "".join(st[1:])
ob1 = Solution()
print(ob1.simplifyPath("/home/"))
print(ob1.simplifyPath("/../"))
print(ob1.simplifyPath("/home//user/"))
Đầu vào
"/home/" "/../" "/home//user/"
Đầu ra
/home / /home/user