数据结构栈之leetcode47(简化路径)
发布时间:2022-12-21 11:09:43 所属栏目:Unix 来源:
导读: leetCode47题:简化路径
题目:
给你一个字符串 path ,表示指向某一文件或目录的Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件
题目:
给你一个字符串 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编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330484号