Canonicalize an Absolute Unix-Style Path With Dot and Double-Dot Segments
MetaSoftware Engineer · OnsiteLast updated
Convert an absolute Unix-style file path into its canonical form by collapsing repeated slashes, dropping single-dot segments, resolving double-dot segments against the parent directory, and treating other dot sequences as ordinary names. It tests careful string parsing and edge cases such as the root directory.
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:
pathstarts 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) <= 3000pathconsists of English letters, digits,.,/, and_.pathis 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.
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.