-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1598-CrawlerLogFolder.go
More file actions
71 lines (62 loc) · 2.59 KB
/
1598-CrawlerLogFolder.go
File metadata and controls
71 lines (62 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package main
// 1598. Crawler Log Folder
// The Leetcode file system keeps a log each time some user performs a change folder operation.
// The operations are described below:
// "../" : Move to the parent folder of the current folder. (If you are already in the main folder, remain in the same folder).
// "./" : Remain in the same folder.
// "x/" : Move to the child folder named x (This folder is guaranteed to always exist).
// You are given a list of strings logs where logs[i] is the operation performed by the user at the ith step.
// The file system starts in the main folder, then the operations in logs are performed.
// Return the minimum number of operations needed to go back to the main folder after the change folder operations.
// Example 1:
// <img src="https://assets.leetcode.com/uploads/2020/09/09/sample_11_1957.png" />
// Input: logs = ["d1/","d2/","../","d21/","./"]
// Output: 2
// Explanation: Use this change folder operation "../" 2 times and go back to the main folder.
// Example 2:
// <img src="https://assets.leetcode.com/uploads/2020/09/09/sample_22_1957.png" />
// Input: logs = ["d1/","d2/","./","d3/","../","d31/"]
// Output: 3
// Example 3:
// Input: logs = ["d1/","../","../","../"]
// Output: 0
// Constraints:
// 1 <= logs.length <= 10^3
// 2 <= logs[i].length <= 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.
import "fmt"
func minOperations(logs []string) int {
res := 0
for _, v := range logs {
if v == "./" {
continue
}
if v == "../" {
if res > 0 { // 不在顶层才做处理
res--
}
} else {
res++
}
}
return res
}
func main() {
// Example 1:
// <img src="https://assets.leetcode.com/uploads/2020/09/09/sample_11_1957.png" />
// Input: logs = ["d1/","d2/","../","d21/","./"]
// Output: 2
// Explanation: Use this change folder operation "../" 2 times and go back to the main folder.
fmt.Println(minOperations([]string{"d1/","d2/","../","d21/","./"})) // 2
// Example 2:
// <img src="https://assets.leetcode.com/uploads/2020/09/09/sample_22_1957.png" />
// Input: logs = ["d1/","d2/","./","d3/","../","d31/"]
// Output: 3
fmt.Println(minOperations([]string{"d1/","d2/","./","d3/","../","d31/"})) // 3
// Example 3:
// Input: logs = ["d1/","../","../","../"]
// Output: 0
fmt.Println(minOperations([]string{"d1/","../","../","../"})) // 0
}