zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Simplify Path(简化路径)

    Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the canonical path.In a UNIX-style file system, a period . refers to the current directory. Furthermore, a double period .. moves the directory up a level. For more information, see: Absolute path vs relative path in Linux/Unix

    Note that the returned canonical path must always begin with a slash /, and there must be only a single slash / between two directory names. The last directory name (if it exists) must not end with a trailing /. Also, the canonical path must be the shortest string representing the absolute path.

    Example 1:

    Input: "/home/"
    Output: "/home"
    Explanation: Note that there is no trailing slash after the last directory name.
    

    Example 2:

    Input: "/../"
    Output: "/"
    Explanation: Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
    

    Example 3:

    Input: "/home//foo/"
    Output: "/home/foo"
    Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
    

    Example 4:

    Input: "/a/./b/../../c/"
    Output: "/c"
    

    Example 5:

    Input: "/a/../../b/../c//.//"
    Output: "/c"
    

    Example 6:

    Input: "/a//b////c/d//././/.."
    Output: "/a/b/c"

    思路

           对于python 的解法而言,我们可以先使用"/"将路径进行分割得到一个列表,设置一个辅助空间栈,然后遍历次列表,如果当前结果为'..',栈不为空弹出栈顶元素,为空则不执行操作。如果为'.',则不进行操作,否则将其添加进栈中。时间复杂度为O(n), 空间复杂度为O(n)。
    解决代码

    
    
     1 class Solution(object):
     2     def simplifyPath(self, path):
     3         """
     4         :type path: str
     5         :rtype: str
     6         """
     7         places = [p for p in path.split("/") if p!="." and p!=""]  # 先将字符串以'/'进行分割,然后进行条件筛选。
     8         stack = []
     9         for p in places:
    10             if p == "..":     # 判断栈是否为空,不为空则弹出栈顶的元素
    11                 if len(stack) > 0:
    12                     stack.pop()
    13             else:
    14                 stack.append(p)
    15         return "/" + "/".join(stack) # 重新进行组合
  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10771056.html
Copyright © 2011-2022 走看看