[LeetCode] 71. Simplify Path

[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;
    }
};
發佈了35 篇原創文章 · 獲贊 0 · 訪問量 4067
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章