สมมติว่าเราต้องออกแบบระบบไฟล์ที่มีสองฟังก์ชันนี้ -
- createPath(path, value) - สิ่งนี้สร้างเส้นทางใหม่และเชื่อมโยงค่ากับมันถ้าเป็นไปได้และส่งคืน True คืนค่า False หากเส้นทางมีอยู่แล้วหรือเส้นทางหลักไม่มีอยู่
- get(path) - ค้นหาค่าที่เกี่ยวข้องกับเส้นทางหรือคืนค่า -1 หากไม่มีเส้นทาง
รูปแบบของเส้นทางคือสตริงที่ต่อกันอย่างน้อยหนึ่งสตริงของแบบฟอร์ม - (เครื่องหมายทับ) / ตามด้วยตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว ตัวอย่างเช่น /programming และ /programming/problems เป็นเส้นทางที่ถูกต้องในขณะที่สตริงว่างและ / ไม่ใช่ ที่นี่เราต้องใช้งานทั้งสองฟังก์ชัน
เป็นอินพุต หากเราสร้างระบบไฟล์ ให้สร้างพาธโดยใช้ ['/a', 1] หลังจากใช้ get() ด้วยพารามิเตอร์ ['/a'] ผลลัพธ์จะเป็น 1พี>
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดแผนที่ d
- เมธอด createPath จะใช้พาธและค่า ซึ่งจะทำหน้าที่เหมือน −
- p :=รายการคอมโพเนนต์ของพาธที่แบ่งโดย '/'
- x :=d
- สำหรับ i ในช่วง 1 ถึงความยาวของ p – 1
- ถ้า p[i] ไม่มีอยู่ใน x ให้คืนค่าเท็จ
- x :=x[p[i]][1]
- ถ้าองค์ประกอบสุดท้ายของ p อยู่ใน x ให้คืนค่าเท็จ
- x[องค์ประกอบสุดท้ายของ p] :=รายการที่มี v และแผนที่ว่างเปล่า
- คืนค่าจริง
- เมธอด get() กำลังนำทาง
- x :=d
- p :=รายการคอมโพเนนต์ของพาธที่แบ่งโดย '/'
- สำหรับ i ในช่วง 1 ถึงความยาวของ p – 1
- ถ้า p[i] ไม่มีอยู่ใน x ให้คืนค่า -1
- x :=x[p[i]][1]
- หากองค์ประกอบสุดท้ายของ p อยู่ใน x ให้คืนค่า x[องค์ประกอบสุดท้ายของ p][0] มิฉะนั้น ให้คืนค่า -1
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class FileSystem(object): def __init__(self): self.d = {} def create(self, p, v): p = p.split("/") x = self.d for i in range(1,len(p)-1): if p[i] not in x: return False x = x[p[i]][1] if p[-1] in x: return False x[p[-1]] = [v,{}] return True def get(self, p): x = self.d p = p.split("/") for i in range(1,len(p)-1): if p[i] not in x: return -1 x= x[p[i]][1] if p[-1] in x: return x[p[-1]][0] else: return -1 ob = FileSystem() print(ob.create("/a", 1)) print(ob.get("/a"))
อินพุต
Initialize the object, then call createPath(“/a”, 1) and get(“/a”)
ผลลัพธ์
True 1