栈
解题思路
路径分隔以后的几种情况:
- 空字符串,例如当出现多个连续的 /,就会分割出空字符串
- 一个点 .
- 两个点 …
- 只包含英文字母、数字或 _ 的目录名;
包含英文字母、数字或 _ 的目录名的时候,入栈,两个点的时候出栈;
最后遍历栈中的目录名,以 / 拼接;
复杂度
-
时间复杂度:
O(n)
,其中 n 是字符串 path 的长度; -
空间复杂度:
O(n)
,存储 names 中的所有字符串;
代码实现
var simplifyPath = function (path) {
// "/a/./b/../../c/"
let stack = []
let paths = path.split('/')
for (let i = 0; i < paths.length; i++) {
const p = paths[i]
if (p == '..') {
stack.pop()
} else if (p && p !== '.') {
// p 不等于 . 和 '' 的情况
stack.push(p)
}
}
// join 方法用于把数组中的所有元素放入一个字符串,通过指定的分隔符进行分隔的
return '/' + stack.join('/')
};
leetcode🧑💻 20. 有效的括号
上一篇