题目描述
Given an absolute path for a file (Unix-style), simplify it.
For example,
path =
"/home/", =>
"/home"
path =
"/a/./b/../../c/", =>
"/c"
解题思路
队列。 从index = 1开始遍历string,当遇到’/’时,计算上一个’/’到现在之间中间的内容,存在如下三种情况。
“.”或者”“,指的是当前路径,不做处理“..”,指的是返回上一层目录,将队列中最后一个元素移除。其他,指的是文件夹名称,将其加入队列最后一个元素。
可以在最开始时候,给路径名末端加上”/”,用以确保路径完整,最后一个元素一定会被合理处理,这样就不用对最后的元素做额外的考虑了。
AC代码
class Solution {
public:
string simplifyPath(
string path) {
if (path.empty())
return "";
list<string> s;
int startIdx =
1;
path +=
"/";
for (
int i =
1; i < path.size(); ++i) {
if (path[i] ==
'/') {
string curPath = path.substr(startIdx, i - startIdx);
startIdx = i +
1;
if (curPath ==
"." || curPath ==
"")
continue;
else if (curPath ==
"..") {
if (!s.empty())
s.pop_back();
}
else {
s.push_back(curPath);
}
}
}
string ans;
while (!s.empty()) {
ans += (
"/" + s.front());
s.pop_front();
}
if (ans ==
"")
return "/";
return ans;
}
};
转载请注明原文地址: https://ju.6miu.com/read-25047.html