# 71. Simplify Path

• Time: $O(|\texttt{path}|)$
• Space: $O(|\texttt{path}|)$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Solution { public: string simplifyPath(string path) { string ans; istringstream iss(path); vector stack; for (string dir; getline(iss, dir, '/');) { if (dir.empty() || dir == ".") continue; if (dir == "..") { if (!stack.empty()) stack.pop_back(); } else { stack.push_back(dir); } } for (const string& s : stack) ans += "/" + s; return ans.empty() ? "/" : ans; } }; 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public String simplifyPath(String path) { final String[] dirs = path.split("/"); Stack stack = new Stack<>(); for (final String dir : dirs) { if (dir.isEmpty() || dir.equals(".")) continue; if (dir.equals("..")) { if (!stack.isEmpty()) stack.pop(); } else { stack.push(dir); } } return "/" + String.join("/", stack); } } 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Solution: def simplifyPath(self, path: str) -> str: stack = [] for str in path.split('/'): if str in ('', '.'): continue if str == '..': if stack: stack.pop() else: stack.append(str) return '/' + '/'.join(stack)