71. 简化路径

解题思路

  1. 路径分隔以后的几种情况:

    • 空字符串,例如当出现多个连续的 /,就会分割出空字符串
    • 一个点 .
    • 两个点 …
    • 只包含英文字母、数字或 _ 的目录名;
  2. 包含英文字母、数字或 _ 的目录名的时候,入栈,两个点的时候出栈;

  3. 最后遍历栈中的目录名,以 / 拼接;

复杂度

  1. 时间复杂度:O(n),其中 n 是字符串 path 的长度;

  2. 空间复杂度: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('/')
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1.
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现