class Solution {
public:
void split(vector<string> &docs, string path) {
int j = -1;
for (int i = 0; i < path.size(); i++) {
if (path[i] == '/') {
if (j >= 0 && i > j)
docs.push_back(path.substr(j, i - j));
j = i + 1;
}
}
if (j < path.size()) {
docs.push_back(path.substr(j, path.size() - j));
}
}
string simplifyPath(string path) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> docs;
vector<string> stk;
split(docs, path);
for (int i = 0; i < docs.size(); i++) {
string doc = docs[i];
if (doc == ".") {
continue;
} else if (doc == "..") {
if (!stk.empty())
stk.pop_back();
} else {
stk.push_back(doc);
}
}
string ret = "";
for (int i = 0; i < stk.size(); i++) {
ret += "/" + stk[i];
}
return ret == "" ? "/" : ret;
}
};
Small Case: 12ms
Large Case: 36ms
Time: O(n)
Space: O(n)