首页 > 其他 > 详细

【字符串】Simplify Path(栈)

时间:2016-02-11 11:11:07      阅读:120      评论:0      收藏:0      [点我收藏+]

题目:

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;
};

 

【字符串】Simplify Path(栈)

原文:http://www.cnblogs.com/shytong/p/5186331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!