zoukankan      html  css  js  c++  java
  • 【字符串】Simplify Path(栈)

    题目:

    Given an absolute path for a file (Unix-style), simplify it.

    For example,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"

    click to show corner cases.

    Corner Cases:
    • Did you consider the case where path = "/../"?
      In this case, you should return "/".
    • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
      In this case, you should ignore redundant slashes and return "/home/foo".

    思路:

    字符串处理,由于".."是返回上级目录(如果是根目录则不处理),因此可以考虑用栈记录路径名,以便于处理。需要注意几个细节:

    1. 重复连续出现的'/',只按1个处理,即跳过重复连续出现的'/';
    2. 如果路径名是".",则不处理;
    3. 如果路径名是"..",则需要弹栈,如果栈为空,则不做处理;
    4. 如果路径名为其他字符串,入栈。

    最后,再逐个取出栈中元素(即已保存的路径名),用'/'分隔并连接起来,不过要注意顺序呦。

    /**
     * @param {string} path
     * @return {string}
     */
    var simplifyPath = function(path) {
        var stack=[],len=path.length,i=0;
        while(i<len){
            //跳过开头的'/''
            while(path[i]=='/'&&i<len){
                i++;
            }
            
            var s='';
            while(i<len&&path[i]!='/'){
                s+=path[i++];
            }
            
            //如果是".."则需要弹栈,否则入栈
            if(".." == s && stack.length!=0){
                stack.pop();
            }else if(s != "" && s != "." && s != ".."){
                stack.push(s);
            }
                
        }
        
        //如果栈为空,说明为根目录,只有斜线'/'
        if(stack.length==0){
            return '/'
        }
        var res='';
        while(stack.length!=0){
            res = "/" + stack.pop() + res;
        }         
        return res;
    };
  • 相关阅读:
    parent和top
    history
    [矩阵快速幂]T-shirt(2018江苏邀请赛I题)
    [学习]Java学习
    [数论]Factors of Factorial
    [RMQ][ST算法]Frequent values
    [二维树状数组]计数问题
    [树状数组]Mishka and Interesting sum(codeforces703D)
    [简单思维题]Snuke's Coloring 2-1
    [树状数组][逆序数]Ultra-QuickSort
  • 原文地址:https://www.cnblogs.com/shytong/p/5186331.html
Copyright © 2011-2022 走看看