现在的位置: 首页 > 综合 > 正文

Simplify Path

2019年07月25日 ⁄ 综合 ⁄ 共 969字 ⁄ 字号 评论关闭

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".

思路:当碰到..回到上层路径,.还是当前路径,由此可知用栈即可实现。
class Solution {
public:
    string simplifyPath(string path) {
        string simple = "";
        stack<string> S;
        stack<string> S2;
        if(path.empty()) {
            return simple;
        }
        int i, len = path.length(),j;
        string str = "";
        for(i=1; i<len; ++i) {
            if (path[i] == '/' || i==len-1) {
                if (i==len-1 && path[i]!='/') {
                    str += path[i];
                }
                if (!str.empty()) {
                    if (str == "..") {
                        str.clear();
                        if (!S.empty()) {
                            S.pop();
                        }
                        continue;
                    }
                    if (str == ".") {
                        str.clear();
                        continue;
                    }
                    S.push(str);
                    str.clear();
                }
            }
            else {
                str += path[i];
            }
        }
        if (S.empty()) {
            return "/";
        }
        while(!S.empty()) {
            S2.push(S.top());
            S.pop();
        }
        while(!S2.empty()) {
            simple += '/';
            simple += S2.top();
            S2.pop();
        }    
        return simple;
    }
};
【上篇】
【下篇】

抱歉!评论已关闭.