Tidy up a file path
A storage service is handed paths with stray slashes and dot segments in them, and stores exactly one canonical form.
- Segments are separated by slashes; runs of slashes count as one.
- A "." segment means "here" and is dropped.
- A ".." segment climbs one level; at the root it does nothing.
- The result starts with a slash and, apart from the root, does not end with one.
- The root itself is a single slash.
tidy_path(raw: string) → string
Where you start
def tidy_path(raw: str) -> str:
Worked examples
| Call | Result |
|---|---|
tidy_path("/home//user/") | "/home/user" |
tidy_path("/a/./b/../c") | "/a/c" |
tidy_path("/../") | "/" |
tidy_path("/") | "/" |
Hint
Split on the slash and push each real segment onto a stack; ".." pops instead. Joining the stack back up gives the answer.
Reference solution in Python
def tidy_path(raw: str) -> str:
kept = []
for part in raw.split("/"):
if part == "" or part == ".":
continue
if part == "..":
if kept:
kept.pop()
else:
kept.append(part)
return "/" + "/".join(kept)