欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Simplify Path

程序员文章站 2022-03-05 12:17:11
...

Simplify Path
解析:这道题不是很难,主要是把情况分清楚就行,也是一道模拟题
所给的示例当中,少了一种比较关键的,即当’.'连续出现3次或3次以上,就表示文件名,
例:/head/…/ 输出:/head/…
’/'作为分隔符,无非出现以下3种情况:

  1. “.” 表示当前路径
  2. "…"表示上层路径
  3. 文件名

故我们只需遍历到’/'时,直接continue就行,其他情况保存在director当中,对director
进行判断是以上哪种情况,进行相应处理即可:

  1. 不做任何操作
  2. 去除上一层目录:pop_back
  3. 添加当前目录:push_back
class Solution {
public:
    string simplifyPath(string path) {
        if (path.empty() || path.length() == 1) return path;
        vector<string> v_res;
        int size = path.length();
        string director = "";
        for (int i = 0; i < size; i++){         
            if (path[i] == '/') continue;
            while (i < size && path[i] != '/'){
                director += path[i];
                i++;
            }
            if (director == ".." && !v_res.empty())
                v_res.pop_back(); //去除上一层目录
            if (director != "." && director != "..")
                v_res.push_back(director); //添加当前目录
            director = "";
        }
        if (v_res.empty()) return "/";
        for (int i = 0; i < v_res.size(); ++i) director += "/" + v_res[i];
        return director;
    }
};