【LeetCode】71. Simplify Path 解题报告(Python)

题目分析:

这一题是让我们简化文件路径,文件路径就是类Unix系统的。如:输入:"/a/./b/…/…/c/",输出:"/c"。我们可以先把斜杠中的串截取出来,然后判断就三种情况,遇到文字串就加入栈,遇到 ’ . ’ 不做处理,遇到 ’ … '就出栈顶层元素。

解题思路:
在分割元素的时候可以自己写判断分割也可以调用split(’/’)。在组合的时候可以用 ‘’.join(list)组合或者栈本身用一个str实现。根据上面的思路,下面有两个测试代码。

测试代码1:

class Solution:
    def simplifyPath(self, path):
        stack = []
        i = 0
        while i < len(path):
            end = i+1
            while end < len(path) and path[end] != "/":
                end += 1
            sub=path[i+1:end]
            if len(sub) > 0:
                if sub == "..":
                    if stack != []: stack.pop()
                elif sub != ".":
                    stack.append('/' + sub)
            i = end
        if stack == []: return "/"
        return ''.join(stack)

print(Solution().simplifyPath("/a/../../b/../c//.//"))

测试代码2:

class Solution:
    def simplifyPath(self, path):
        path = path.split('/')
        curr = '/'
        for i in path:
            if i == '..':
                if curr != '/':
                    curr = '/'.join(curr.split('/')[:-1])
                    if curr == '': curr = '/'
            elif i != '.' and i != '':
                curr += '/' + i if curr != '/' else i
        return curr

print(Solution().simplifyPath("/a/../../b/../c//.//"))

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值