Tags: "leetcode", "python", access_time 1-min read

Edit this post on Github

Simplify Path

Created: November 8, 2018 by [lek-tin]

Last updated: November 8, 2018

Given an absolute path for a file (Unix-style), simplify it.

For example, path = "/home/", => "/home" path = "/a/./b/../../c/", => "/c" path = "/a/../../b/../c//.//", => "/c" path = "/a//b////c/d//././/..", => "/a/b/c"

In a UNIX-style file system, a period ('.') refers to the current directory, so it can be ignored in a simplified path. Additionally, a double period ("..") moves up a directory, so it cancels out whatever the last directory was. For more information, look here:

Corner Cases:

Did you consider the case where path = "/../"? In this case, you should return "/". Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/". In this case, you should ignore redundant slashes and return "/home/foo".

Solution

class Solution:
    def simplifyPath(self, path):
        """
        :type path: str
        :rtype: str
        """
        parts = path.split("/")
        res = []
        for part in parts:
            print(part)
            if part != "." and part != ".." and part != "":
                res.append(part)
            if part == "..":
                if len(res) > 0:
                    del res[-1]
        return "/" + "/".join(res)