Given an absolute path in a Unix-style file system, return its simplified canonical form.
Function Signature
def simplify_path(path: str) -> str:
Rules
Interpreting the input:
-
path
starts with
/
.
-
A single period
.
refers to the current directory and is dropped.
-
A double period
..
moves up to the parent directory; at the root it stays at the root.
-
Several consecutive slashes (for example
//
) act as a single slash.
-
Any other sequence of characters between slashes is a directory or file name, including sequences of three or more periods such as
...
.
The canonical output:
-
starts with a single
/
;
-
separates names with exactly one
/
;
-
has no trailing
/
unless the result is the root
/
itself;
-
contains no
.
or
..
components.
Constraints
-
1 <= len(path) <= 3000
-
path
consists of English letters, digits,
.
,
/
, and
_
.
-
path
is a valid absolute Unix path.
Examples
Example 1
Input: path = "/home//foo/"
Output: "/home/foo"
Explanation: the double slash collapses to one and the trailing slash is removed.
Example 2
Input: path = "/../"
Output: "/"
Explanation: moving up from the root stays at the root.
Example 3
Input: path = "/.../a/../b/c/../d/./"
Output: "/.../b/d"
Explanation: ... is an ordinary name; a/.. and c/.. cancel out, and . is dropped.