用Python設計檔案系統
假設我們必須設計一個提供以下兩個功能的檔案系統:
- createPath(path, value) − 如果可能,此函式建立一個新路徑併為其關聯一個值,並返回 True。如果路徑已存在或其父路徑不存在,則返回 False。
- get(path) − 此函式查詢與路徑關聯的值,如果路徑不存在,則返回 -1。
路徑的格式是由一個或多個以“/”開頭,後跟一個或多個小寫英文字母的字串連線而成。例如,/programming 和 /programming/problems 是有效的路徑,而空字串和 / 不是。這裡我們必須實現這兩個函式。
例如,如果我們建立一個檔案系統,然後使用 [‘/a’, 1] 建立一個路徑,那麼在使用 get() 函式和引數 [‘/a’] 後,輸出將為 1。
為了解決這個問題,我們將遵循以下步驟:
- 定義一個對映 d
- createPath 方法將接收路徑和值,其工作方式如下:
- p := 透過“/”分割路徑得到的元件列表
- x := d
- 對於範圍從 1 到 p 的長度減 1 的 i
- 如果 x 中不存在 p[i],則返回 false
- x := x[p[i]][1]
- 如果 x 中存在 p 的最後一個元素,則返回 false
- x[p 的最後一個元素] := 包含 v 和空對映的列表
- 返回 true
- get() 方法接收路徑
- x := d
- p := 透過“/”分割路徑得到的元件列表
- 對於範圍從 1 到 p 的長度減 1 的 i
- 如果 x 中不存在 p[i],則返回 -1
- x := x[p[i]][1]
- 如果 x 中存在 p 的最後一個元素,則返回 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP