• [LeetCode] 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".

    如果仅仅从不断replace输入路径的角度出发,会非常复杂。

    如果用一个栈来一次存储各级路径的directory名字,然后重组,会简便一些,这也是文件路径简化类题目的常用思路。

    为了末尾可以顺序遍历栈重组path,我们不用传统的stack lib,而用vector来实现栈,这样可以方便顺序遍历。

    代码:

    class Solution {
    public:
        string simplifyPath(string path) {
            if(path.length() == 0) return "";
            vector<string> v;
            int p = 0, start = 0;
            while(p < path.length()){
                if(path[p] == '/') ++p;
                else{
                    start = p;
                    while(p < path.length() && path[p] != '/') ++p;
                    string temp = path.substr(start, p-start);
                    if(temp == ".."){ 
                        if(!v.empty()) v.pop_back(); //遇到".."就出栈
                        else{
                            if(path[0] != '/') v.push_back(temp); //如果没东西可以出,就要看path是否以根目录开头了,不是以根目录开头的话,".."要进栈的
                        }
                    }else if(temp == "."){} //遇到"."就跳过
                    else if(temp.length() > 0){
                        v.push_back(temp);
                    }
                }
            }
            string res = (path[0] == '/' ? "/" : ""); //重组path
            for(vector<string>::iterator i = v.begin(); i < v.end(); ++i){
                res.append(*i);
                if(i < v.end()-1) res.append("/");
            }
            return res;
        }
    };
  • 相关阅读:
    Ubuntu安装k8s
    SecureCRT连ubuntu
    硬盘安装ubuntu系统
    发布服务
    使用rancher2建k8s集群--个人学习记录
    spring boot 注解
    用STS构建spring boot
    使用js调用麦克风并录音
    全国省市区信息,mysql数据库记录
    ef core 3 migration
  • 原文地址:https://www.cnblogs.com/felixfang/p/3682058.html
Copyright © 2020-2023  润新知