diff options
Diffstat (limited to 'crawler_log_folder.c')
-rw-r--r-- | crawler_log_folder.c | 33 |
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 +} |