Last updated on March 7th, 2025 at 08:13 pm
Here, we see a Simplify Path LeetCode Solution. This Leetcode problem is solved using different approaches in many programming languages, such as C++, Java, JavaScript, Python, etc.
List of all LeetCode Solution
Topics
Stack, String
Companies
Facebook, Microsoft
Level of Question
Medium

Simplify Path LeetCode Solution
Table of Contents
1. Problem Statement
Given a string path
, which is an absolute path (starting with a slash '/'
) to a file or directory in a Unix-style file system, convert it to the simplified canonical path.
In a Unix-style file system, a period '.'
refers to the current directory, a double period '..'
refers to the directory up a level, and any multiple consecutive slashes (i.e. '//'
) are treated as a single slash '/'
. For this problem, any other format of periods such as '...'
are treated as file/directory names.
The canonical path should have the following format:
- The path starts with a single slash
'/'
. - Any two directories are separated by a single slash
'/'
. - The path does not end with a trailing
'/'
. - The path only contains the directories on the path from the root directory to the target file or directory (i.e., no period
'.'
or double period'..'
)
Return the simplified canonical path.
Example 1:
Input: path = "/home/"
Output: "/home"
Explanation: Note that there is no trailing slash after the last directory name.
Example 2:
Input: path = "/../"
Output: "/"
Explanation: Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
Example 3:
Input: path = "/home//foo/"
Output: "/home/foo"
Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
2. Coding Pattern Used in Solution
The coding pattern used in this code is “Stack-based Path Simplification”. The stack is used to simulate the behavior of navigating through a file system, where ..
means moving up one directory, and .
or empty strings are ignored.
3. Code Implementation in Different Languages
3.1 Simplify Path C++
class Solution { public: string simplifyPath(string path) { string res, s; stack<string>stk; stringstream ss(path); while(getline(ss, s, '/')) { if (s == "" || s == ".") continue; if (s == ".." && !stk.empty()) stk.pop(); else if (s != "..") stk.push(s); } while(!stk.empty()){ res = "/"+ stk.top() + res; stk.pop(); } return res.empty() ? "/" : res; } };
3.2 Simplify Path Java
class Solution { public String simplifyPath(String path) { String[] dir = path.split("/"); String[] stack = new String[dir.length]; int ptr = 0; for(int i = 0; i < dir.length; i++){ if(dir[i].equals(".") || dir[i].equals("")){ continue; }else if(dir[i].equals("..")){ if(ptr > 0) ptr--; }else{ stack[ptr] = dir[i]; ptr++; } } StringBuilder result = new StringBuilder(); for(int i = 0; i < ptr; i++){ result.append("/"); result.append(stack[i]); } return result.length() == 0 ? "/" : result.toString(); } }
3.3 Simplify Path JavaScript
var simplifyPath = function(path) { let stack = []; path = path.split('/'); for (let i=0;i<path.length;i++) { if (path[i]=='.' || path[i]=='') continue; if (path[i]=='..') stack.pop(); else stack.push(path[i]); } return '/'+stack.join('/'); };
3.4 Simplify Path Python
class Solution(object): def simplifyPath(self, path): stack = [] for token in path.split('/'): if token in ('', '.'): pass elif token == '..': if stack: stack.pop() else: stack.append(token) return '/' + '/'.join(stack)
4. Time and Space Complexity
Time Complexity | Space Complexity | |
C++ | O(n) | O(n) |
Java | O(n) | O(n) |
JavaScript | O(n) | O(n) |
Python | O(n) | O(n) |
- Time Complexity: The time complexity is O(n) for all implementations because:
- Splitting the path into tokens takes O(n), where n is the length of the input string.
- Each token is processed once in the loop, which is also O(n).
- Constructing the final result from the stack is O(n) in the worst case.
- Space Complexity: The space complexity is O(n) for all implementations because:
- The stack can hold at most n tokens in the worst case.
- The final result string or array also requires O(n) space.
- The logic is consistent across all implementations, with minor differences in syntax and language-specific features.