持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
题目
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠 '/' 开头。
- 两个目录名之间必须只有一个斜杠 '/' 。
- 最后一个目录名(如果存在)不能 以 '/' 结尾。
- 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
- 返回简化后得到的 规范路径 。
输入: path = "/../"
输出: "/"
解释: 从根目录向上一级是不可行的,因为根目录是你可以到达的最高级
题解
我们根据上面的要求进行实现,先创建一个变量为
stack,它是一个空的栈,用于存放我们的拆分后保存的路径,在声明一个str变量,它是用于存放我们保存拆分后拼接的字符串路径,也是结果路径,函数执行完成之后需要返回出去,在声明一个pathArr变量,存放的是通过split方法把出参path进行拆分的数组,进行循环pathArr遍历,在循环的过程中,我们通过if语句进行判断当前拆分后的路径在决定对stack变量做出栈还是入栈的操作,循环过后通过pathArr.length判断当前存放拆分出参数组的数组中是否有数据,如果有数据则通过/加上stack数组使用join('/')方法拼接出来的字符串赋值给接收结果的str变量,如果没有数组则直接把/赋值给接收结果的str变量,最后进行返回
/**
* @param {string} path
* @return {string}
*/
var simplifyPath = function(path) {
let stack=[];
let str='';
let pathArr=null;
pathArr=path.split('/');
pathArr.forEach(R=>{
// 在循环的时候我们需要判断当前的数据它存在且等于..则进行出栈操作
if(R&&R=='..'){
stack.pop();
}else if(R&&R!='.'){
// 如果我们当前的数据存在且等于.,我们则执行入栈操作
stack.push(R);
}
})
if(pathArr.length){
str='/'+stack.join('/');
}else{
str='/';
}
return str;
};
坚持努力,无惧未来!