• lintcode-421-简化路径


    421-简化路径

    给定一个文档(Unix-style)的完全路径,请进行路径简化。

    样例

    "/home/", => "/home"
    "/a/./b/../../c/", => "/c"

    挑战

    你是否考虑了 路径 = "/../" 的情况?
    在这种情况下,你需返回"/"。
    此外,路径中也可能包含双斜杠'/',如 "/home//foo/"。
    在这种情况下,可忽略多余的斜杠,返回 "/home/foo"。

    标签

    字符串处理 栈

    思路

    • 首先分割 path,滤除 '/',且将分割后的路径保存在数组里,数组每个元素为一个目录名,包含 "." 和 ".."
    • 然后遍历数组,将此时的元素入栈,若遇到 "." ,略过;遇到 "..",则出栈一个元素(注意栈空的情况)
    • 最后根据栈生成简化后的路径

    code

    class Solution {
    public:
        /*
         * @param path: the original path
         * @return: the simplified path
         */
        string simplifyPath(string path) {
            // write your code here
            int size = path.size();
            if (size <= 0) {
                return string("");
            }
            // 分割路径
            path += '/';
            vector<string> pathVector;
            string p;
            for (int i = 0; i <= size; i++) {
                if (path[i] == '/') {
                    if (!p.empty()) {
                        pathVector.push_back(p);
                        p.clear();
                    }
                }
                else {
                    p += path[i];
                }
            }
            // 简化路径
            stack<string> parhStack;
            for (int i = 0; i < pathVector.size(); i++) {
                if (pathVector[i] != "." && pathVector[i] != "..") {
                    parhStack.push(pathVector[i]);
                }
                else if (pathVector[i] == ".." && !parhStack.empty()) {
                    parhStack.pop();
                }
            }
            // 重写路径
            string result;
            if (parhStack.empty()) {
                return string("/");
            }
            while (!parhStack.empty()) {
                result.insert(0, "/" + parhStack.top());
                parhStack.pop();
            }
            return result;
        }
    };
    
  • 相关阅读:
    TYPE_SCROLL_INSENSITIVE is not compatible with CONCUR_UPDATABLE
    with admin option /with grant option
    通过动态SQL语句创建游标
    Vue:在vue-cli中使用Bootstrap
    Vue:$set和$delete
    Vue:如何在vue-cli中创建并引入自定义组件
    MVC教程四:Controller向View传值的几种方式
    Vue:生命周期
    Vue.js常用指令:v-model
    vue:过滤器
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7374014.html
Copyright © 2020-2023  润新知