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

数据结构栈之leetcode47(简化路径)

发布时间:2022-12-21 11:09:43 所属栏目:Unix 来源:
导读:  leetCode47题:简化路径

  题目:

  给你一个字符串 path ,表示指向某一文件或目录的Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。

  在 Unix 风格的文件
  leetCode47题:简化路径
 
  题目:
 
  给你一个字符串 path ,表示指向某一文件或目录的Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
 
  在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
 
  请注意,返回的 规范路径 必须遵循下述格式:
 
  始终以斜杠 '/' 开头。两个目录名之间必须只有一个斜杠 '/' 。最后一个目录名(如果存在)不能 以 '/' 结尾。此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即unix路径简化,不含 '.' 或 '..')。返回简化后得到的 规范路径 。
 
  leetcode题目链接:leetcode-cn.com/problems/si…解题思路:
 
  所使用到的原理及考察能力: 栈原理、数组push()方法、数组pop()方法、考察读题理解能力。
 
  本题目是规范路径,传入的路径要按照上面的四点要求规范。将传入的路径用split()字符串方法按照'/'分割为数组,同时声明一个stack空数组,和str空字符串,遍历数组。遍历数组的值分为两种情况,情况一:val=‘..’,表示上层文件夹,stack.pop()删除,因为'../'表示返回上一层文件夹,返回到../符号之前的文件夹所在文件夹下,所以要stack.pop()掉;情况二:val != ‘.’,因为./表示当前文件夹下,'./'之前的文件夹就已经代表了'./',所以不需要push到stack数组中。注意:情况一和情况二不能交换位置; 最后判断stack的length,arr.length等于0,返回‘/’;否则使用数组join('/')方法转换成以/分开的字符串
 
  复杂度: 时间复杂度O(n)、空间复杂度O(n)
 
  var simplifyPath = function(path) {
      let arr= path.split('/')
      let stack = []
      let str = ''
      arr.forEach(item=>{
          if(item && item === '..'){
              stack.pop()
          }else if(item && item != '.'){
              stack.push(item)
          }
      })
       arr.length ? str='/' + stack.join('/') : str='/'
       return str
  };
  复制代码
 

(编辑:PHP编程网 - 钦州站长网)

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

    推荐文章