zoukankan      html  css  js  c++  java
  • 71. Simplify Path(js)

    71. Simplify Path

    Given an absolute path for a file (Unix-style), simplify it. Or in other words, convert it to the canonical path.

    In a UNIX-style file system, a period . refers to the current directory. Furthermore, a double period .. moves the directory up a level. For more information, see: Absolute path vs relative path in Linux/Unix

    Note that the returned canonical path must always begin with a slash /, and there must be only a single slash / between two directory names. The last directory name (if it exists) must not end with a trailing /. Also, the canonical path must be the shortest string representing the absolute path.

    Example 1:

    Input: "/home/"
    Output: "/home"
    Explanation: Note that there is no trailing slash after the last directory name.
    

    Example 2:

    Input: "/../"
    Output: "/"
    Explanation: Going one level up from the root directory is a no-op, as the root level is the highest level you can go.
    

    Example 3:

    Input: "/home//foo/"
    Output: "/home/foo"
    Explanation: In the canonical path, multiple consecutive slashes are replaced by a single one.
    

    Example 4:

    Input: "/a/./b/../../c/"
    Output: "/c"
    

    Example 5:

    Input: "/a/../../b/../c//.//"
    Output: "/c"
    

    Example 6:

    Input: "/a//b////c/d//././/.."
    Output: "/a/b/c"
    题意:unix系统的路径简化
    /**
     * @param {string} path
     * @return {string}
     */
    var simplifyPath = function(path) {
    //     法一
        // let v=[];
        // let i=0;
        // while(i<path.length){
        //     while(path[i]==='/' && i<path.length) i++;
        //     if(i===path.length) break;
        //     let start=i;
        //     while(path[i]!=='/' && i<path.length) i++;
        //     let end=i-1;
        //     let s=path.substr(start,end-start+1);
        //     if(s==='..'){
        //         if(v.length>0) v.pop();
        //     }else if(s!=='.'){
        //         v.push(s);
        //     }
        // }
        // if(v.length===0) return '/';
        // let res='';
        // for(let i=0;i<v.length;i++){
        //     res+='/'+v[i];
        // }
        // return res;
    //     法二
        return '/'+path.split('/').filter(str=> str!=='' && str!=='.').reduce((arr,str)=>{
            if(str==='..') arr.pop();
            else arr.push(str);
            return arr;
        },[]).join('/');
    };


  • 相关阅读:
    day04作业
    一个简单的gridlayout栗子
    用户名、密码等15个常用的js正则表达式
    html 颜色
    心态好的人,一辈子都好
    怎么样好好的聊天呢
    一篇引用文章
    再见,发微信不回的人
    第一个不怎么正经的网页
    关于学科目标
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10540185.html
Copyright © 2011-2022 走看看