zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    配置JDK
    360首页(练习)
    表单练习——(简单的注册页面)
    主页
    证明某字母是否最后一个字母
    方法的重载与重写区别
    什么是设计模式
    java 静态方法和实例方法的区别
    什么是静态方法
    手机充电(练习)
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7374014.html
Copyright © 2011-2022 走看看