leetcode-简化路径
题目要求
思路
对于这道题目,我们需要知道每一级路径是什么样的(即两个’/'符号之间的内容)。
- 如果是’.’,表示当前目录,这一级目录实际上什么用处也没有,需要排除。
- 如果是’…'表示上一级目录,那么就需要向上返回一级。
- 如果两个’/'连在一起,也是多余的,需要去掉。
- 另外就是将路径最后面的’/'去掉。
具体做法:
我们设定一个栈stack来存储当前的绝对路径,用一个字符串temp来存储临时的子路径名,然后从前到后遍历题目给出的绝对路径中的所有字符,不是’/‘时更新temp,即将当前字符加到temp后面,遇到’/‘符号时进行分情况讨论,如果temp是前两种情况那么什么都不用做,如果是’…’,便将栈顶出栈,而之后的栈顶就相当于回到了上一层文件夹,如果是文件夹名,入栈即可。
class Solution {
public:
string simplifyPath(string path) {
stack<string> paths; //栈,存储路径
int q = 0; //用来遍历path
string temp = ""; //存储单个的子路径
while(q <= path.size())
{
//如果path[q]是‘/’或者q是path的长度(考虑到最后一个目录后面可能没有斜杠的情况)
if(path[q] == '/' || q==path.size())
{
if(temp == "." || temp.size() == 0)
{ //前两种情况,什么都不做
}
else if(temp == "..")
{
if(!paths.empty()) //处理“从根目录向上一级是不可行的”这种情况
paths.pop(); //上一个文件夹,即出栈
}
else
{
paths.push(temp); //正常情况,文件夹入栈
}
temp = ""; //将temp置空重新开始
q++;
}
else //将temp更新
{
temp += path[q];
q++;
}
}
string result = "";
if(paths.empty()) //如果只剩个根文件夹,特判一下直接输出
return "/";
while(!paths.empty())
{
result = '/' + paths.top() + result; //从后往前,依此添加路径,因为以斜杠开头,所以..
paths.pop();
}
return result;
}
};
嘤嘤嘤~
这道题要考虑的细节好多,我是小辣鸡