題目連結:
題目意譯:
Leetcode 檔案系統會在每位使用者執行一個切換資料夾之操作時保存一個記錄檔。
操作可以被以下敘述定義:
"../":從當前資料夾移動到其父節點。(如果你已經在主資料夾了,則停留在同一個資料夾。)
"./": : 停留在同一個資料夾。
"x/": : 移動到子資料夾,其名稱為 x(這個資料夾保證存在)。
你被給定一字串列表 logs,其中 logs[i] 為第 i 步時某使用者執行的操作。
檔案系統開始於主資料夾,接著 logs 中的操作將被執行。
回傳執行完所有切換資料夾的操作後,回到主資料夾最少所需要執行的操作次數。
限制:
1 ≦ logs.length ≦ 10 ^ 3
2 ≦ logs[i].length ≦ 10
logs[i] 包含著小寫英文字母、數字、'.' 和 '/'。
logs[i] 遵循著上述敘述的格式。
資料夾名稱由小寫英文字母和數字所組成。
範例測資:
範例 1:
輸入: logs = ["d1/","d2/","../","d21/","./"]
輸出: 2
解釋: 使用切換資料夾操作 "../" 2 次便可以回到主資料夾。
範例 2:
輸入: logs = ["d1/","d2/","./","d3/","../","d31/"]
輸出: 3
範例 3:
輸入: logs = ["d1/","../","../","../"]
輸出: 0
解題思維:
很單純,甚至不需要記錄任何資料夾名稱。
我們只需要一個變數 C(一開始是 0),代表當前的「深度」(即離主資料夾多遠)。當遇到 "../",就將 C 減去 1,而當 C 變成 -1 時將其歸零(因為代表執行指令前就已經在主資料夾了);而當遇到 "./" 的時候,則將該指令忽略;最後當遇到「不是」"./" 時,則將 C 加 1(代表往子資料夾走,離主資料夾又多隔了一層)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。