前往此题

解题思路

题目的大致意思是让我们过滤路径中哪些多余的操作符,在这里我们先统计下有哪些操作符:

  • / : 文件路径标示,必须保留
  • //: 像这种多个斜杠的符号其实与单个的意义相同,当做单个来处理就行
  • .: 表示当前目录,直接过滤掉就好
  • ..: 表示返回上一级目录,需要做特判

这样一整理其实思路已经很明确了,我们需要先把所有文件夹名过滤出来放在数组中,这样才好操作。同时还需要将斜杠给过滤掉,放到数组中进行遍历。

算法过程

  1. 创建变量栈stack,负责存储所有文件夹名
  2. 同时对路径path进行分割,分割标识符为/,将结果存储到数组tmp
  3. 然后遍历tmp,将无意义的符号过滤掉并将文件夹名放入到stack
  4. 如果遇到..符号,执行stack.pop()即可
  5. 最后将stack转成字符串,以/分割后返回

代码

class Solution:
    def simplifyPath(self, path: str) -> str:
        tmp = path.split('/')
        stack = []
        res = '/'

        for c in tmp:
            if c != '.' and c != '..' and c != '':
                stack.append(c)
            if c == ".." and stack: stack.pop()

        return res + '/'.join(stack)