[Leetcode][python]Simplify Path

女爷i 2022-06-07 08:11 284阅读 0赞

题目大意

化简Unix系统下一个文件的绝对路径。
输入: path = “/a/./b/../../c/”

输出: “/c”

解题思路

参考:
https://shenjie1993.gitbooks.io/leetcode-python/071%20Simplify%20Path.html

  1. “/” 根目录
  2. “..” 跳转上级目录,上级目录为空,所以依旧处于 “/”
  3. “a” 进入子目录a,目前处于 “/a”
  4. “b” 进入子目录b,目前处于 “/a/b”
  5. “c” 进入子目录c,目前处于 “/a/b/c”
  6. “.” 当前目录,不操作,仍处于 “/a/b/c”
  7. “..” 返回上级目录,最终为 “/a/b”

用栈来处理,碰到有效字符就压栈,遇到上层目录字符”..”且栈不空时就弹出。为了最后连接字符串时头上有根目录,在栈底加一个空字符。

  1. >>> a= ['a','b','c']
  2. >>> '/'.join(a)
  3. 'a/b/c'
  4. >>> a = ['','a','b']
  5. >>> '/'.join(a)
  6. '/a/b

代码

  1. class Solution(object):
  2. def simplifyPath(self, path):
  3. """
  4. :type path: str
  5. :rtype: str
  6. """
  7. parts = path.split("/")
  8. result = ['']
  9. for part in parts:
  10. if part:
  11. if part not in ('.', '..'):
  12. if len(result) == 0: # 若栈底空了,加入空字符再加入目录名
  13. result.append('')
  14. result.append(part)
  15. elif part == '..' and len(result) > 0:
  16. result.pop()
  17. if len(result) < 2:
  18. return "/"
  19. else:
  20. return "/".join(result) # 以/来组合list里的字符

总结

发表评论

表情:
评论列表 (有 0 条评论,284人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Path

    Path工具类:用来记录线条的轨迹路径。 canvas.draw(path,paint); 贝塞尔曲线 手机充电等等效果 现实生活当中:任何的曲线和曲面都可以用