สมมติว่าเรามีเส้นทางที่แน่นอนสำหรับไฟล์ (เช่นเดียวกับระบบไฟล์ Unix) เราต้องทำให้มันง่ายขึ้น หรืออีกนัยหนึ่ง เราต้องแปลงเป็นเส้นทางตามบัญญัติ ในระบบไฟล์สไตล์ UNIX จุด '.' หมายถึงไดเร็กทอรีปัจจุบัน และจุดสองจุด '..' จะย้ายไดเร็กทอรีขึ้นหนึ่งระดับ (ไดเร็กทอรีหลัก) คุณสมบัติของเส้นทางตามรูปแบบบัญญัติมีดังนี้
- เส้นทางต้องเริ่มต้นด้วยเครื่องหมายทับ /
- ต้องมีเครื่องหมายทับเดียว / ระหว่างชื่อไดเรกทอรีสองชื่อ
- ชื่อไดเร็กทอรีสุดท้าย (ถ้ามี) ต้องไม่ลงท้ายด้วย /.
- เส้นทาง Canonical ต้องเป็นสตริงที่สั้นที่สุดซึ่งแสดงถึงเส้นทางที่แน่นอน
ตัวอย่างเช่น หากเส้นทางที่กำหนดคือ “/home/”, “/../” และ “/home//user/” พาธที่แปลงแล้วจะเป็น “/home”, “/” และ “/home/ ผู้ใช้”
ให้เราดูขั้นตอน -
- จดรายการ st แล้วใส่ '/' ลงไป
- a :=รายการสตริงหลังจากแยกเส้นทางที่กำหนดด้วยตัวคั่น '/'
- สำหรับแต่ละองค์ประกอบ i ใน a
- ถ้าฉันเป็นประจำเดือนสองครั้ง
- ถ้าความยาวของ st> 1 ให้ลบองค์ประกอบสุดท้ายออกจาก st ไม่เช่นนั้นให้ดำเนินการต่อ
- ถ้าเป็นประจำเดือนก็ไปต่อ
- ถ้าไม่ใช่สตริงว่าง ให้แทรก ('/' เชื่อม i) ลงใน st
- ถ้าฉันเป็นประจำเดือนสองครั้ง
- ถ้า st มีเพียงหนึ่งองค์ประกอบ ให้ส่งคืน '/'
- ส่งคืนหลังจากเชื่อมองค์ประกอบทั้งหมดที่มีอยู่ใน st
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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/"))
อินพุต
"/home/" "/../" "/home//user/"
ผลลัพธ์
/home / /home/user