LeetCode 71. Simplify Path

简介: 给定文件的绝对路径(Unix下的路径)字符串,简化此字符串。

v2-27cea55cec37a1652c495e69aceea49e_1440w.jpg


Description



Given an absolute path for a file (Unix-style), simplify it.


For example,

path = "/home/", => "/home"

path = "/a/./b/../../c/", => "/c"

path = "/a/../../b/../c//.//", => "/c"

path = "/a//b////c/d//././/..", => "/a/b/c"


In a UNIX-style file system, a period ('.') refers to the current directory, so it can be ignored in a simplified path. Additionally, a double period ("..") moves up a directory, so it cancels out whatever the last directory was. For more information, look here.


Corner Cases:

Did you consider the case where path = "/../"?

In this case, you should return "/".

Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".


In this case, you should ignore redundant slashes and return "/home/foo".


描述



给定文件的绝对路径(Unix下的路径)字符串,简化此字符串。


举例:

path = "/home/", => "/home"

path = "/a/./b/../../c/", => "/c"

path = "/a/../../b/../c//.//", => "/c"

path = "/a//b////c/d//././/..", => "/a/b/c"


在UNIX的文件系统中,英文句点('.')表示当前目录,因此在简化绝对路径时可以忽略它。 并且,一个双英文句点("..")表示向上移动一个目录,因此返回了双句点前面的路径。 有关Unix系统文件路径的更多信息,请移步这里.


思路


  • 这道题目主要使用了这种数据结构.
  • 我们首先拆分字符串,以"/"为拆分依据(python中可以直接使用拆分函数).
  • 我们声明一个数组形式的栈stack,然后我们依次检查每一个元素.
  1. 如果当前位置是".",则什么也不做.
  2. 如果当前位置是"..",从stack中pop出一个元素(如果stack中有数据,如果没有,什么也不做)
  3. 如果不是以上两种情况,把当前元素压入栈.
  4. 最后以"/"为连接元素,把栈中的所有元素连接成一个字符串.


class Solution:
    def simplifyPath(self, path):
        """
        :type path: str
        :rtype: str
        """
        # 如果path为空,返回Nonoe
        if not path:
            return None
        # 以"/"拆分字符串
        path = path.split("/")
        # 声明一个空栈
        stack = []
        # 依次检查每一个元素
        for item in path:
            # 这里使用的是python3自带的拆分函数,会返回空值,所以需要判断一下
            # 如果是空值或者"."则什么也不做
            if not item or item == '.':
                continue
            # 如果是".."
            elif item == "..":
                # 如果栈不空,则弹出栈顶元素
                if stack:
                    stack.pop()
            # 如果不为空,不是".",不是".."则压入栈
            else:
                stack.append(item)
        # 用"/"连接所有元素,返回
        return '/'+'/'.join(stack)


源代码文件在这里.

目录
相关文章
LeetCode Contest 178-1368. 使网格图至少有一条有效路径的最小代价 Minimum Cost to Make at Least One Valid Path in a Grid
LeetCode Contest 178-1368. 使网格图至少有一条有效路径的最小代价 Minimum Cost to Make at Least One Valid Path in a Grid
|
存储
LeetCode 329. Longest Increasing Path in a Matrix
给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。
70 0
LeetCode 329. Longest Increasing Path in a Matrix
|
Go
LeetCode 124. Binary Tree Maximum Path Sum
给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
69 0
LeetCode 124. Binary Tree Maximum Path Sum
LeetCode 64. Minimum Path Sum
给定m x n网格填充非负数,找到从左上到右下的路径,这最小化了沿其路径的所有数字的总和。 注意:您只能在任何时间点向下或向右移动。
102 0
LeetCode 64. Minimum Path Sum
Leetcode-Easy 437. Path Sum III
Leetcode-Easy 437. Path Sum III
91 0
Leetcode-Easy 437. Path Sum III
LeetCode 112 Path Sum(路径和)(BT、DP)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50569025 翻译 给定一个二叉树root和一个和sum, 决定这个树是否存在一条从根到叶子的路径使得沿路所有节点的和等于给定的sum。
758 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行