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;
    };
  • 相关阅读:
    安装Hadoop
    爬虫综合大作业
    爬取全部校园新闻
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式
    大数据应用期末总评
    分布式文件系统HDFS 练习
  • 原文地址:https://www.cnblogs.com/shytong/p/5186331.html
Copyright © 2011-2022 走看看