版权声明:本文章为博主原创,转载请注明出处。保留所有权利。

Contents
  1. 1. 题目
  2. 2. 解析

Leetcode-71的解题过程。

  • 题目

    Given an absolute path for a file (Unix-style), simplify it.
    For example,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => “/c”

  • 解析

    简化路径。这道题本身的逻辑不是很难,考虑到路径的层级特点,栈结构是比较适合用来做这道题的。将原始字符串按照"/"分割后,再根据分割后的每一层的路径来决定压栈或是弹栈。但是这道题中需要考虑的边界情况和特殊情况很多,例如:

  • 路径为"/../"。在这种情况下,简化后的路径应当为"/"
  • 路径中包含多个连续的"/",例如"/home//foo/"。这种情况下应当去掉多余的"/"
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    class Solution(object):
    def simplifyPath(self, path):
    """
    :type path: str
    :rtype: str
    """
    if path == '/':
    return path

    stack = []
    subs = path.split('/')
    for s in subs:
    if s == '..':
    if len(stack) == 0:
    continue
    else:
    stack.pop()
    elif s == '.' or s == '':
    continue
    else:
    stack.append(s)
    if len(stack) == 0:
    return '/'
    #stack = stack[::-1]

    p = ''

    for s in stack:
    p+='/'
    p+=s

    return p

打赏

取消
扫码支持

你的支持是对我最好的鼓励

Contents
  1. 1. 题目
  2. 2. 解析