aboutsummaryrefslogtreecommitdiff
path: root/crawler_log_folder.c
diff options
context:
space:
mode:
Diffstat (limited to 'crawler_log_folder.c')
-rw-r--r--crawler_log_folder.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/crawler_log_folder.c b/crawler_log_folder.c
new file mode 100644
index 0000000..b24fda4
--- /dev/null
+++ b/crawler_log_folder.c
@@ -0,0 +1,33 @@
+// 1598. Crawler Log Folder
+#include "leetcode.h"
+
+/*
+ * 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' which is guaranteed to exist. you are given a list of
+ * strings 'logs' where 'logs[i]' is the operation performed by the user at the
+ * i'th step.
+ */
+
+int minOperations(char **logs, int logsSize) {
+ int steps = 0;
+ char *parent = "../", *curr = "./";
+ for (int i = 0; i < logsSize; i++) {
+ if (logs[i] == parent)
+ steps = fmax(steps - 1, 0);
+ else if (logs[i] != curr)
+ steps++;
+ }
+ return steps;
+}
+
+int main() {
+ char *l1[] = {"d1/", "d2/", "../", "d21/", "./"},
+ *l2[] = {"d1/", "d2/", "./", "d3/", "../", "d31/"},
+ *l3[] = {"d1/", "../", "../", "../"};
+ printf("%d\n", minOperations((char **)l1, ARRAY_SIZE(l1))); // execpt: 2
+ printf("%d\n", minOperations((char **)l2, ARRAY_SIZE(l2))); // execpt: 3
+ printf("%d\n", minOperations((char **)l3, ARRAY_SIZE(l3))); // execpt: 0
+}