Simplify Path - Problem

You are given an absolute path for a Unix-style file system, which always begins with a slash '/'. Your task is to transform this absolute path into its simplified canonical path.

The rules of a Unix-style file system are as follows:

  • A single period '.' represents the current directory.
  • A double period '..' represents the previous/parent directory.
  • Multiple consecutive slashes such as '//' and '///' are treated as a single slash '/'.
  • Any sequence of periods that does not match the rules above should be treated as a valid directory or file name. For example, '...' and '....' are valid directory or file names.

The simplified canonical path should follow these rules:

  • The path must start with a single slash '/'.
  • Directories within the path must be separated by exactly one slash '/'.
  • The path must not end with a slash '/', unless it is the root directory.
  • The path must not have any single or double periods ('.' and '..') used to denote current or parent directories.

Return the simplified canonical path.

Input & Output

Example 1 — Basic Path Simplification
$ Input: path = "/home/"
Output: "/home"
💡 Note: Remove trailing slash except for root directory
Example 2 — Parent Directory Navigation
$ Input: path = "/home/../var/./log/../"
Output: "/var"
💡 Note: Start with home, go back with .., enter var, stay with ., enter log, go back with ..
Example 3 — Multiple Consecutive Slashes
$ Input: path = "/home//foo/"
Output: "/home/foo"
💡 Note: Multiple slashes '//' treated as single '/', remove trailing slash

Constraints

  • 1 ≤ path.length ≤ 3000
  • path consists of English letters, digits, period '.', slash '/' or '_'
  • path is a valid absolute Unix path

Visualization

Tap to expand
Simplify Path - Stack-Based Solution INPUT Unix-style path string: "/home/" Split by '/' separator: "" "home" "" Path Rules: "." = current dir (skip) ".." = parent (pop stack) "///" = single "/" "..." = valid name (push) "home" = valid (push) ALGORITHM STEPS 1 Initialize Stack Create empty stack [] stack: [] 2 Split Path Split by "/" delimiter ["", "home", ""] 3 Process Each Part Apply rules to each "" skip "home" push "" skip stack: ["home"] 4 Build Result Join with "/" prefix "/" + "home" = "/home" FINAL RESULT Simplified Canonical Path: "/home" Verification: [OK] Starts with "/" [OK] No trailing "/" [OK] No "." or ".." [OK] Single "/" separators Final Stack State: "home" bottom Key Insight: Use a stack to track valid directory names. Push valid names, pop on "..", skip "." and empty strings. Join the stack with "/" to build the canonical path. Time: O(n), Space: O(n) where n = path length. The stack naturally handles nested directories and parent navigation (..) operations. TutorialsPoint - Simplify Path | Stack-Based Optimal Solution
Asked in
Facebook 15 Amazon 12 Google 8 Microsoft 6
78.0K Views
High Frequency
~25 min Avg. Time
2.1K Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen