สมมติว่าเราต้องออกแบบระบบไฟล์ที่มีสองฟังก์ชันนี้ -
- 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