1. 程式人生 > >【Leetcode】71. 簡化路徑

【Leetcode】71. 簡化路徑

題目

給定一個文件 (Unix-style) 的完全路徑,請進行路徑簡化。

例如,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"

邊界情況:

你是否考慮了 路徑 = "/../" 的情況?在這種情況下,你需返回 "/" 。此外,路徑中也可能包含多個斜槓 '/' ,如 "/home//foo/" 。在這種情況下,你可忽略多餘的斜槓,返回 "/home/foo" 。

題解

這個題目讓我想起了大學資料結構的第一個實驗,寫一個計算器,包括括號,小數等等情況,當時需要處理的情況比較複雜,而自己也是寫得十分醜陋。

回到本題,要處理上面說的各種符號的情況,無非就是向stack中加pop元素還是push元素。

  1. pop : 兩個點的時候代表回上一級目錄,那麼把棧定元素出棧
  2. 如果遇到不是點,也不是空格,不是回退到上一級目錄,那麼進棧

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 恐懼從來不是一個好的顧問,不管是在我們的個人生活中,還是在社會中。文化和社會被恐懼所塑造,在將來這無疑也不會消失。

近期熱門

Leetcode名企之路

一年不是365天,而是8760個小時!————艾力