前端数据结构与算法每日一题——栈(71. 简化路径)

99 阅读1分钟

题目

解法一:

/**
 * @param {string} path
 * @return {string}
 */
var simplifyPath = function(path) {
// '.' 代表的是当前目录本身: 换句话说就是 /a/./b === /a/b 它是可以去掉的
// '..'代表的是当前目录的前一个目录: 意思就是要指向上一级目录,把当前目录删掉, 换句话说就是 /a/b/../c === /a/c 它也是可以去掉的,而且还要把他前面的目录去掉
// 第一步: 先以'/' 切割字符串成数组
// 例如 "/a/./b/..//../c/" 变成了 ['a','.','b','..','','..','c'] ==> ['a','b','..','..','c'] ==> ['a','..','c']==>['c']=> 'c'
// 第二步: 遍历数组;
// 1. 如果值为 '''.'就跳过不放入栈
// 2. 如果值为 '..' 就跳过不放入栈, 并且如果栈有值还要pop()
// 3. 其他数据就可以直接放入栈中;
// 最后: 用'/'拼接数组, 注意最前面的‘/’也要拼接
    let stack= []
    let arr = path.split('/')
    for(let i of arr){
        if(i && i == '..'){
            stack.pop()
        }else if(i && i!='.') {
            stack.push(i)
        }
    }
    return '/'+stack.join('/')
};