情境模擬: 資料夾深度 Crawler Log Folder_Leetcode #1598

更新於 發佈於 閱讀時間約 3 分鐘

題目敘述 Crawler Log Folder

題目給定一串目錄進出的操作指令,請問所有指令完成後,回到根目錄需要幾個步驟?

../ 代表回到上一層目錄
./ 代表留在目前的目錄
x/ 代表前往名稱為x的子目錄

測試範例

Example 1:

raw-image


Input: logs = ["d1/","d2/","../","d21/","./"]
Output: 2
Explanation: Use this change folder operation "../" 2 times and go back to the main folder.


Example 2:

raw-image


Input: logs = ["d1/","d2/","./","d3/","../","d31/"]
Output: 3


Example 3:

Input: logs = ["d1/","../","../","../"]
Output: 0

約束條件

Constraints:

  • 1 <= logs.length <= 10^3

指令的數量介於1~1000個

  • 2 <= logs[i].length <= 10

每個指令的長度介於2~10之間

  • logs[i] contains lowercase English letters, digits, '.', and '/'.

指令只會有小寫英文字母、數字、.、斜線

  • logs[i] follows the format described in the statement.

指令都符合題目敘述的指令格式

  • Folder names consist of lowercase English letters and digits.

資料夾名稱只會有小寫英文字母和數字


演算法 模擬法

直接根據每一條指令進行模擬

如果遇到../就回到上一層的目錄,深度-1。

如果遇到./就留在目前目錄,深度不改變。

如果遇到x/就進入到下一層名子為x的子目錄,深度+1。


最後,模擬結束時,深度就是回到根目錄所需要的操作次數。


程式碼 模擬法

class Solution:
def minOperations(self, logs: List[str]) -> int:

level = 0

for command in logs:

if command == "../":

# go backward, up to root(0) at most
level = max(level-1, 0)
elif command != "./":

# go forward
level += 1

return level

複雜度分析

時間複雜度: O(n)

線性掃描每個指令,所需時間為O(n)。

空間複查度: O(1)

所用到的都是固定尺寸的臨時變數,為常數級別O(1)。


Reference

[1] Crawler Log Folder - LeetCode

avatar-img
92會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
題目敘述 IPO 新企業準備上市增資,初始資本是w,可以參加k個專案。 每個專案的獲利和投入成本分別記錄在profits和capital陣列。 請問,在盡可能增資的情況下,最後最大的總資本是多少?
題目敘述 Merge Nodes in Between Zeros 給定一個鏈結串列,合併非零區間的節點(以加總的方式合併),輸出合併後的鏈結串列。
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
題目敘述 All Ancestors of a Node in a Directed Acyclic Graph 給定一個有向無環圖,請找出每個點的祖先,以陣列的形式返回答案。
題目敘述 Most Profit Assigning Work 公司裡有n位員工,m件任務。 每位員工的能力記錄在worker陣列。 每個任務對應的能力要求和獲利紀錄在difficulty 和profit陣列。 不同的員工可以做同樣的任務。 請問怎麼分配任務可以得到整體最大獲利?
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
題目敘述 IPO 新企業準備上市增資,初始資本是w,可以參加k個專案。 每個專案的獲利和投入成本分別記錄在profits和capital陣列。 請問,在盡可能增資的情況下,最後最大的總資本是多少?
你可能也想看
Google News 追蹤
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
邏輯,是幫助我們判斷事理的重要因子。本篇我們將從表述、系統、思維下手來探討如何透過邏輯來幫助我們看清問題,甚至是解決問題。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
邏輯,是幫助我們判斷事理的重要因子。本篇我們將從表述、系統、思維下手來探討如何透過邏輯來幫助我們看清問題,甚至是解決問題。
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。