目录
1,题目
给你一个字符串 path
,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'
开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.
)表示当前目录本身;此外,两个点 (..
) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//'
)都被视为单个斜杠 '/'
。 对于此问题,任何其他格式的点(例如,'...'
)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠
'/'
开头。 - 两个目录名之间必须只有一个斜杠
'/'
。 - 最后一个目录名(如果存在)不能 以
'/'
结尾。 - 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含
'.'
或'..'
)。
返回简化后得到的 规范路径 。
2,代码
合理利用数据结构栈 并灵活应用数组和字符串的相互转换;
最后结果的输出即为栈内数组对应的字符串;
/**
* @param {string} path
* @return {string}
*/
var simplifyPath = function(path) {
// 利用/来分割字符串
const names = path.split('/');
// 用数组来模拟栈
const stack = [];
for(const name of names){
if(name === '..'){
if(stack.length){
stack.pop();
}
}else if(name.length && name !='.'){
stack.push(name);
}
}
// 将数组模拟的栈 转化为字符串
return '/'+stack.join('/');
};
3,学习与总结
3.1路径基本知识
在 Unix 风格的文件系统中,一个点(.
)表示当前目录本身;此外,两个点 (..
) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//'
)都被视为单个斜杠 '/'
。