Last updated on August 3rd, 2024 at 09:33 pm
Here, We see Simplify Path LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.
List of all LeetCode Solution
Topics
Stack, String
Companies
Facebook, Microsoft
Level of Question
Medium
Simplify Path LeetCode Solution
Table of Contents
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.
1. Simplify Path Leetcode Solution 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; } };
2. Simplify Path Leetcode Solution 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. Simplify Path Leetcode Solution 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('/'); };
4. Simplify Path Leetcode Solution 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)