forked from dnp1204/daily-code-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
problem-17.js
58 lines (55 loc) · 1.95 KB
/
problem-17.js
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
/**
* Company: Google.
*
* Suppose we represent our file system by a string in the following manner:
* The string "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" represents:
* dir
* subdir1
* subdir2
* file.ext
*
* The directory dir contains an empty sub-directory subdir1 and a sub-directory
* subdir2 containing a file file.ext.
* The string "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
* represents:
* dir
* subdir1
* file1.ext
* subsubdir1
* subdir2
* subsubdir2
* file2.ext
* The directory dir contains two sub-directories subdir1 and subdir2. subdir1
* contains a file file1.ext and an empty second-level sub-directory subsubdir1.
* subdir2 contains a second-level sub-directory subsubdir2 containing a file file2.ext.
*
* We are interested in finding the longest (number of characters) absolute path to a
* file within our file system. For example, in the second example above, the longest
* absolute path is "dir/subdir2/subsubdir2/file2.ext", and its length is 32
* (not including the double quotes).
*
* Given a string representing the file system in the above format, return the length of
* the longest absolute path to a file in the abstracted file system. If there is no
* file in the system, return 0.
*
* Note:
* The name of a file contains at least a period and an extension.
* The name of a directory or sub-directory will not contain a period.
*
* Leetcode: https://leetcode.com/problems/longest-absolute-file-path/
*/
var lengthLongestPath = function(input) {
const dirs = input.split('\n');
let max = 0;
let pathLen = Array(dirs.length).fill(0);
for (const dir of dirs) {
const stripDir = dir.replace(/(\t)+/, '');
const depth = dir.length - stripDir.length;
if (stripDir.includes('.')) {
max = Math.max(max, pathLen[depth] + stripDir.length);
} else {
pathLen[depth + 1] = pathLen[depth] + stripDir.length + 1;
}
}
return max;
};