444 words
2 minutes
LeetCode71:Simplify Path(Medium)
2025-04-18

LeetCode71. Simplify Path (Medium)#

📝 Problem Statement#

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.

The 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.

The simplified canonical path should follow these 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.

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.

Problem Solution#

class Solution:
    def simplifyPath(self, path: str) -> str:
        result = []
        components = path.split('/')
        for comp in components:
            if comp =='' or comp== '.':
                continue
            elif comp =='..':
                if result:
                    result.pop()
            else:
                result.append(comp)
        
        return'/' + '/'.join(result)
        

str.split(separator=None, maxsplit=-1)#

Function:#

Splits a string into a list of substrings based on the specified separator.

Parameters:#

  • separator (optional): The delimiter string. By default, splits on whitespace.
  • maxsplit (optional): Maximum number of splits. Default is no limit.

Returns:#

  • A list of substrings.

Example:#

s = "a,b,c"
parts = s.split(",")
# parts = ['a', 'b', 'c']
s = "  hello   world  "
s.split()
# ['hello', 'world']

separator.join(iterable)#

Function:#

Joins a sequence of strings using the specified separator.

Parameters:#

  • iterable: An iterable containing strings (e.g., list, tuple).

Returns:#

  • A string formed by joining the elements with the separator.

Example:#

parts = ['a', 'b', 'c']
",".join(parts)
# 'a,b,c'
"/".join(['home', 'user', 'documents'])
# 'home/user/documents'

Common Use Case: Path Simplification#

Example:#

path = "/home//user/./docs/../"
components = path.split("/")  
# ['', 'home', '', 'user', '.', 'docs', '..', '']

# After filtering
result = ['home', 'user']

# Join to create the simplified path
simplified_path = '/' + '/'.join(result)
# '/home/user'

Summary#

MethodPurposeReturn Type
str.split()String → Listlist[str]
str.join()List of strings → Stringstr

These methods are particularly useful for text parsing, file path handling, and data processing.

LeetCode71:Simplify Path(Medium)
https://nanshanvv.github.io/shuchangwen-webpage/posts/leetcode/71/
Author
Shuchang Wen
Published at
2025-04-18