1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
# Simplify Path See [Leetcode 71](https://leetcode.com/problems/simplify-path/description/). 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**. --- ## 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. --- ## Simplified canonical path 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. --- ## Examples **Example 1** ``` Input: path = "/home/" Output: "/home" ``` Explanation: The trailing slash should be removed. --- **Example 2** ``` Input: path = "/home//foo/" Output: "/home/foo" ``` Explanation: Multiple consecutive slashes are replaced by a single one. --- **Example 3** ``` Input: path = "/home/user/Documents/../Pictures" Output: "/home/user/Pictures" ``` Explanation: A double period "`..`" refers to the directory up a level (the parent directory). --- **Example 4** ``` Input: path = "/../" Output: "/" ``` Explanation: Going one level up from the root directory is not possible. --- **Example 5** > **Input**: path = "/.../a/../b/c/../d/./" **Output**: > "/.../b/d" **Explanation**: "`...`" is a valid name for a > directory in this problem. --- ## Constraints - `1 <= path.length <= 3000` - `path` consists of English letters, digits, period `'.'`, slash `'/'`, or `'_'`. - `path` is a valid absolute Unix path.