1166 設計檔案系統

2021-10-20 14:14:56 字數 3157 閱讀 4477

題目描述:

你需要設計乙個能提供下面兩個函式的檔案系統:

create(path, value): 建立乙個新的路徑,並盡可能將值 value 與路徑 path 關聯,然後返回 true。如果路徑已經存在或者路徑的父路徑不存在,則返回 false。

get(path): 返回與路徑關聯的值。如果路徑不存在,則返回 -1。

「路徑」 是由乙個或多個符合下述格式的字串連線起來形成的:在 / 後跟著乙個或多個小寫英文本母。

例如 /leetcode 和 /leetcode/problems 都是有效的路徑,但空字串和 / 不是有效的路徑。

好了,接下來就請你來實現這兩個函式吧!(請參考示例以獲得更多資訊)

示例 1:

輸入:[「filesystem」,「create」,「get」]

[,["/a",1],["/a"]]

輸出:[null,true,1]

解釋:filesystem filesystem = new filesystem();

filesystem.create("/a", 1); // 返回 true

filesystem.get("/a"); // 返回 1

示例 2:

輸入:[「filesystem」,「create」,「create」,「get」,「create」,「get」]

[,["/leet",1],["/leet/code",2],["/leet/code"],["/c/d",1],["/c"]]

輸出:[null,true,true,2,false,-1]

解釋:filesystem filesystem = new filesystem();

filesystem.create("/leet", 1); // 返回 true

filesystem.create("/leet/code", 2); // 返回 true

filesystem.get("/leet/code"); // 返回 2

filesystem.create("/c/d", 1); // 返回 false 因為父路徑 「/c」 不存在。

filesystem.get("/c"); // 返回 -1 因為該路徑不存在。

對兩個函式的呼叫次數加起來小於等於 10^4

2 <= path.length <= 100

1 <= value <= 10^9

方法1:

(1)構建字典樹;

(2)將給出的路徑先進行分割,得到每一級的結點字串,若該字串在字典樹中有結點,則接著在字典樹中遍歷,若沒有,則判斷當前結點是否是分割路徑中的最後乙個結點,若是,則生成對應結點,並返回true;否則返回false;

(3)對於get函式,同樣將路徑先進行分割,判斷路徑的存在性即可;

struct node 

;class

filesystem

//將給定的字串進行分割,獲得乙個個結點

void

split_path

(string&path,vector

&paths)

string str=path.

substr

(i+1

,index-i-1)

;if(!str.

empty()

)}i=index-1;

}}bool

createpath

(string path,

int value)

vector paths;

split_path

(path,paths)

;//分割路徑

if(paths.

empty()

) node* tmp=root;

for(

int i=

0;isize()

;++i)

else

}else

}return

false;}

intget

(string path)

else

}return tmp-

>value;}}

;/**

* your filesystem object will be instantiated and called as such:

* filesystem* obj = new filesystem();

* bool param_1 = obj->createpath(path,value);

* int param_2 = obj->get(path);

*/

方法2:

主要思路:

(1)改為go**

type filesystem struct

func

constructor

() filesystem

}func

(this *filesystem)

createpath

(path string

, value int

)bool

paths := strings.

split

(path,

"/")

for i:=

1;i<

len(paths)

;i++

return

true

}else

}else

}return

false

}func

(this *filesystem)

get(path string

)int

else

}return this.value;

}/**

* your filesystem object will be instantiated and called as such:

* obj := constructor();

* param_1 := obj.createpath(path,value);

* param_2 := obj.get(path);

*/

檔案系統設計考慮

乙個磁碟可以有數個分割槽,典型的unix系統中每個磁碟分割槽會有幾個檔案系統。順序介紹幾個概念,會對以後的問題更為清晰。主引導記錄 master boot record 整個磁碟的0號扇區。它的最基本作用就是引導載入計算機的作業系統。過程如下 1.計算機啟動bios 2.bios讀入執行mbr 3....

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...

FAT 檔案系統設計思想

1 fat1 fat2 緊挨保留扇區之後 2 fat1 fat2 中內容都是關於檔案 目錄的簇號連線。3 資料區中檔案和目錄的屬性。檔案為使用者的資料集。目錄為檔案和子目錄的目錄項集。1 保留扇區 fat12 16 通常為1扇區,fat32 通常為32 扇區 2 db t12 16 只有乙個 損壞不...