基本思路:用vector<string> dirs存储新路径中的文件夹名称,遍历整个旧路径——

  1. 遇到/.,忽略
  2. 遇到..,将dirs中最后一个元素推出
  3. 遇到其他字符串,推入dirs

遍历完毕后,用/连接dirs即为答案。

代码如下:

//
// Created by jt on 2020/9/25.
//
#include <string>
#include <vector>
using namespace std;

class Solution {
public:
    /**
     *
     * @param path string字符串
     * @return string字符串
     */
    string simplifyPath(string path) {
        // write code here
        vector<string> dirs;
        for (int i = 0; i < path.size(); ++i) {
            if (path[i] != '/') {
                int j = i;
                while (j < path.size() && path[j] != '/') ++j;
                string tmp = path.substr(i, j-i);
                i = j;
                if (tmp == ".." && !dirs.empty()) dirs.pop_back();
                if (tmp != "." && tmp != "..") dirs.push_back(tmp);
            }
        }
        string res;
        for (auto str: dirs) res += "/" + str;
        if (res.size() < 1) return "/";
        else return res;
    }
};