资讯专栏INFORMATION COLUMN

[Leetcode] Simplify Path 化简路径

liangzai_cool / 2854人阅读

摘要:栈法复杂度时间空间思路思路很简单,先将整个路径按照分开来,然后用一个栈,遇到时弹出一个,遇到和空字符串则不变,遇到正常路径则压入栈中。注意如果结果为空,要返回一个弹出栈时要先检查栈是否为空代码

Simplify Path

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

For example,

path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
栈法 复杂度

时间 O(N) 空间 O(N)

思路

思路很简单,先将整个路径按照/分开来,然后用一个栈,遇到..时弹出一个,遇到.和空字符串则不变,遇到正常路径则压入栈中。

注意

如果结果为空,要返回一个/

弹出栈时要先检查栈是否为空

代码
public class Solution {
    public String simplifyPath(String path) {
        Stack stk = new Stack();
        String[] parts = path.split("/");
        for(String part : parts){
            switch(part){
                case ".":
                case "" :
                    break;
                case "..":
                    if(!stk.isEmpty()){
                        stk.pop();
                    }
                    break;
                default:
                    stk.push(part);
            }
        }
        StringBuilder sb = new StringBuilder();
        if(stk.isEmpty()){
            return "/";
        }
        while(!stk.isEmpty()){
            sb.insert(0, "/"+stk.pop());
        }
        return sb.toString();
    }
}

2018/2

class Solution:
    def simplifyPath(self, path):
        """
        :type path: str
        :rtype: str
        """
        parts = path.split("/")
        simplified = []
        for part in parts:
            if part == "." or part == "":
                continue
            elif part == "..":
                simplified and simplified.pop()
            else:
                simplified.append(part)
        return "/" + "/".join(simplified)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64631.html

相关文章

  • leetcode71. Simplify Path

    摘要:标题文字简化风格的绝对路径。我们可以首先将所有的内容从中分离出来,然后分别处理。这里我们需要用到堆栈的数据结构。堆栈有很多种实现方式,中的类类都可以实现其功能。我们将读到的路径入栈,根据操作符出栈,最后将栈中剩余的元素组织成路径返回即可。 标题文字 Given an absolute path for a file (Unix-style), simplify it. For exa...

    darkerXi 评论0 收藏0
  • [LeetCode] 71. Simplify Path

    Problem 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 //here: b is cancelle...

    superw 评论0 收藏0
  • 71. Simplify Path

    摘要:题目解答的规则如下三种需要跳过的情况当遇到时,需要向前进出来的顺序是反的,所以加的时候,把最新出来的路径加在前面 题目:Given an absolute path for a file (Unix-style), simplify it. For example,path = /home/, => /homepath = /a/./b/../../c/, => /cclick to ...

    EdwardUp 评论0 收藏0
  • [LintCode] Simplify Path [字符串操作]

    摘要:,可以用函数去掉所有,然后多考虑一个中间为空的。关于语句的一个特点我们对和其实都是不做操作,然而,两个可以都,但是不能都不做操作。像这样这样这两个就都会等价于下一个就会出错。 Problem Given an absolute path for a file (Unix-style), simplify it. Example /home/, => /home //去掉末尾的slash...

    leanxi 评论0 收藏0
  • 用Python学数学之Sympy代数符号运算

    摘要:的符号运算如果之前是学数学相关专业了解计算机代数系统,就会对数学符号的运算比较熟悉,而如果之前是程序员,可能会有点不太明白,下面我们就来了解一下。 在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,...

    Jackwoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<