【Leetcode】71. 簡化路徑
阿新 • • 發佈:2018-12-10
題目
給定一個文件 (Unix-style) 的完全路徑,請進行路徑簡化。
例如,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"
邊界情況:
你是否考慮了 路徑 = "/../" 的情況?在這種情況下,你需返回 "/" 。此外,路徑中也可能包含多個斜槓 '/' ,如 "/home//foo/" 。在這種情況下,你可忽略多餘的斜槓,返回 "/home/foo" 。
題解
這個題目讓我想起了大學資料結構的第一個實驗,寫一個計算器,包括括號,小數等等情況,當時需要處理的情況比較複雜,而自己也是寫得十分醜陋。
回到本題,要處理上面說的各種符號的情況,無非就是向stack中加pop元素還是push元素。
- pop : 兩個點的時候代表回上一級目錄,那麼把棧定元素出棧
- 如果遇到不是點,也不是空格,不是回退到上一級目錄,那麼進棧
java程式碼
class Solution { public String simplifyPath(String path) { Stack<String> stack = new Stack<>(); String[] p = path.split("/"); for (int i = 0; i < p.length; i++) { if (!stack.empty() && p[i].equals("..")) stack.pop(); else if (!p[i].equals(".") && !p[i].equals("") && !p[i].equals("..")) stack.push(p[i]); } return "/" + String.join("/", stack); } }
python程式碼
class Solution: def simplifyPath(self, path): """ :type path: str :rtype: str """ stack = [] p = path.split('/') for i in p: if len(stack) > 0 and i == '..': stack.pop() elif i != '.' and i != '' and i != '..': stack.append(i) return '/' + '/'.join(stack)
因為對Python不是超級熟悉,這裡踩了一個小小的坑。python中 != ==是對值的比較,類似於java中的equals (值)python中的 is, is not 是對物件本身的比較,類似於java中的A == B (指標)
每日英文
Fear has never been a good adviser, neither in our personal lives nor in our society. Cultures and societies that are shaped by fear, will without doubt not get a grip on the future. ‧Angela Merkel 恐懼從來不是一個好的顧問,不管是在我們的個人生活中,還是在社會中。文化和社會被恐懼所塑造,在將來這無疑也不會消失。
近期熱門
一年不是365天,而是8760個小時!————艾力