基本思路:用vector<string> dirs
存储新路径中的文件夹名称,遍历整个旧路径——
- 遇到
/
或.
,忽略 - 遇到
..
,将dirs
中最后一个元素推出 - 遇到其他字符串,推入
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; } };