Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the canonical path.
In a UNIX-style file system, a period
. refers to the current directory. Furthermore, a double period
.. moves the directory up a level. For more information, see: Absolute path vs relative path in Linux/Unix
Note that the returned canonical path must always begin with a slash
/, and there must be only a single slash
/ between two directory names. The last directory name (if it exists) must not end with a trailing
/. Also, the canonical path must be the shortest string representing the absolute path.
Input: "/home/" Output: "/home" Explanation: Note that there is no trailing slash after the last directory name.
Input: "/../" 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.
Input: "/home//foo/" Output: "/home/foo" Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
Input: "/a/./b/../../c/" Output: "/c"
Input: "/a/../../b/../c//.//" Output: "/c"
Input: "/a//b////c/d//././/.." Output: "/a/b/c"
We first split the string to a string array. The “” and “.” mean nothing, we ignore them. Meet any content we push to the stack, meet “..” we pop out of the stack. If in the end, the stack is empty, we output “/”. If not, we output everything left in the stack in order.
I make a Gif to show the process, for example string is “/a//b///../c/d/..//.//..” :
Code like this:
Other problems related to stack and queue, see also Stack and Queue Data Structure (Java code and Leetcode problems)