# Leetcode 71 Simplify Path ###### tags: `Leetcode` `程式菜雞的coding日常` ## 題目原文 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. ## 題目理解 將Unix形式的路徑簡化。 以'/'開始,兩個directory中間會以一個'/'分開,結尾不會有'/',並且簡化後的路徑只有從起點到終點的路徑。 其餘指令: * /./代表停在原地 * /../代表往回一層 * 多個'/'(如////)當作跟只有一個/一樣 ## 解題思路 利用類似stack的概念來做出最短路徑。 先利用stringstraem將字串做分離,再根據條件決定要push還是pop,最後再輸出就可以了。 ## 程式實作 ```cpp= class Solution { public: string simplifyPath(string path) { vector<string> file; string ans = "",tmp; stringstream ss(path); while(getline(ss,tmp,'/')){ if(!file.empty() && tmp == ".."){ file.pop_back(); }else if(tmp != "." && tmp != ".." && tmp != ""){ file.push_back(tmp); } } for(string s:file){ ans += "/" + s; } return ans.empty() ? "/":ans; } }; ``` ## 後記 2023/4/12的daily challenge 剛說要努力日更結果第二天就忘記了,笑死