feat: 添加简化路径算法题(71)

This commit is contained in:
= 2024-05-22 18:10:29 +08:00
parent a14a16117d
commit 436b0f2ae7

View File

@ -0,0 +1,71 @@
/*
71. 简化路径
中等
相关标签
相关企业
给你一个字符串 path 表示指向某一文件或目录的 Unix 风格 绝对路径 '/' 开头请你将其转化为更加简洁的规范路径
Unix 风格的文件系统中一个点.表示当前目录本身此外两个点 .. 表示将目录切换到上一级指向父目录两者
都可以是复杂相对路径的组成部分任意多个连续的斜杠'//'都被视为单个斜杠 '/' 对于此问题任何其他格式的点例如'...'均被视为文件/目录名称
请注意返回的 规范路径 必须遵循下述格式
始终以斜杠 '/' 开头
两个目录名之间必须只有一个斜杠 '/'
最后一个目录名如果存在不能 '/' 结尾
此外路径仅包含从根目录到目标文件或目录的路径上的目录不含 '.' '..'
返回简化后得到的 规范路径
示例 1
输入path = "/home/"
输出"/home"
解释注意最后一个目录名后面没有斜杠
示例 2
输入path = "/../"
输出"/"
解释从根目录向上一级是不可行的因为根目录是你可以到达的最高级
示例 3
输入path = "/home//foo/"
输出"/home/foo"
解释在规范路径中多个连续斜杠需要用一个斜杠替换
示例 4
输入path = "/a/./b/../../c/"
输出"/c"
提示
1 <= path.length <= 3000
path 由英文字母数字'.''/' '_' 组成
path 是一个有效的 Unix 风格绝对路径
*/
/**
* @param {string} path
* @return {string}
*/
const simplifyPath = function (path) {
path.replace(/\/+/g, '/'); // 优化,把连续的/替换成当个/,防止生成过多空格
const parts = path.split('/'); // 把路径分隔开
const len = parts.length;
const stack = [];
for (let i = 0; i < len; i++) {
switch (parts[i]) {
case '..':
stack.pop();
break;
case '.':
case '':
break;
default:
stack.push(parts[i]);
}
}
return `/${stack.join('/')}`;
};
console.log(simplifyPath('/../'));