forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
0071-simplify-path.js
36 lines (26 loc) · 825 Bytes
/
0071-simplify-path.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
/**
* Stack
* Time O(N) | Space O(N)
* https://leetcode.com/problems/simplify-path
* @param {string} path
* @return {string}
*/
var simplifyPath = (path, slash = '/', stack = []) => {
const paths = path.split(slash).filter(Boolean);
for (const _path of paths) traversePath(_path, stack);
return `${slash}${stack.join(slash)}`;
};
const traversePath = (path, stack) => {
if (canPush(path)) return stack.push(path);
if (canPop(path, stack)) stack.pop();
};
const canPush = (path) => !(
isCurrentDirectory(path) ||
isParentDirectory(path)
);
const canPop = (path, stack) =>
isParentDirectory(path) &&
!isEmpty(stack);
const isCurrentDirectory = (path) => (path === '.');
const isParentDirectory = (path) => (path === '..');
const isEmpty = ({ length }) => (0 === length);