加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

LeetCode71-简化路径

发布时间:2022-10-14 11:08:15 所属栏目:Unix 来源:
导读:  感觉最近做算法题没有状态了

  一个上午就只搞了这道题

  而且还没弄出来

  有些惭愧啊

  明天就出CCF考试成绩了

  希望能给我好运

  71-简化路径

  以 Unix 风格给出
  感觉最近做算法题没有状态了
 
  一个上午就只搞了这道题
 
  而且还没弄出来
 
  有些惭愧啊
 
  明天就出CCF考试成绩了
 
  希望能给我好运
 
  71-简化路径
 
  以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
 
  在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
 
  请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 /结尾。此外,规范路径必须是表示绝对路径的最短字符串。
 
  示例 1:
 
  输入:"/home/"
  输出:"/home"
  解释:注意,最后一个目录名后面没有斜杠。
  示例 2:
 
  输入:"/../"
  输出:"/"
  解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
  示例 3:
 
  输入:"/home//foo/"
  输出:"/home/foo"
  解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
  示例 4:
 
  输入:"/a/./b/../../c/"
  输出:"/c"
  示例 5:
 
  输入:"/a/../../b/../c//.//"
  输出:"/c"
  示例 6:
 
  输入:"/a//b////c/d//././/.."
  输出:"/a/b/c"
  思路:
 
  这一题我上午做的时候,跑偏了,考虑的贼复杂。我当时想:先给这个路径字符串去掉多余元素,比如:“//”变成“/”,“./”直接删掉等以致于考虑的情况特别多,做到后面就崩溃了。后面忍不住就看了网上一些大佬的做法,茅塞顿开。
 
  步骤如下:
 
  首先用str.split('/')将路径给分隔开,这样至少先不用考虑多斜杠的问题了。接下来就只需要考虑"."以及".."这两种情况了。按照题目要求:出现"."直接删掉,出现".."将其前一个元素删掉即可。最后只要将“/”分别插入新得到的字符列表中即可。可用"/".join(str)函数解决。
 
  代码如下:
 
  class Solution:
      def simplifyPath(self, path):
          """
          :type path: str
          :rtype: str
          """
          stack = list()
          path = [p for p in path.split('/') if p]
          print(path)
          for f in path:
              if f == '.':
                  continue
              elif f == '..':
                  if stack:
                      stack.pop()
              else:
                  stack.append(f)
          # 这一步是往stack列表中每两个个元素中间插入"/"。并且省略了判断stack是否为空,很巧妙
          return '/'+'/'.join(stack)
  if __name__ == "__main__":
      path = "/.../"
      new_path = Solution().simplifyPath(path)
      print(new_path)
  方法很巧妙,但是执行效率确比较低unix路径简化,大家要是有什么好的方法也请积极留言。
 
 
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章