[LeetCode] 71. Simplify Path

来源:互联网 发布:淘宝水果店名起名大全 编辑:程序博客网 时间:2024/05/18 02:57

[LeetCode] 71. Simplify Path


Given an absolute path for a file (Unix-style), simplify it.

For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”

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

分析文件路径,其实通过’/’就是分割字符串,’/’之间的字符串分三种情况:

  • s == “..”, 保存文件路径的栈的栈顶出栈。
  • s == “.”, 什么都不做。
  • s == 其他, 压栈。

class Solution {public:    string simplifyPath(string path) {        vector<string> p;        int len = path.length();        string s = "";        for (int i=0; i<len; ++i) {            if (path[i] == '/') {                if (s == "..") {                    if (!p.empty()) {                        p.pop_back();                    }                } else if (s != "." && s != "") {                    p.push_back(s);                }                s = "";            } else {                s += path[i];            }        }        if (s == "..") {            if (!p.empty()) {                p.pop_back();            }        } else if (s != "." && s != "") {            p.push_back(s);        }        string res = "";        int psize = p.size();        for (int i=0; i<psize; ++i) {            res += "/" + p[i];        }        return res == "" ? "/" : res;    }};
0 0