leetcode71——Simplify Path

题目大意:给出一个Unix的文件路径,简化它("/a/./b/../../c/", => "/c"

分析:栈的应用。由于../表示返回上级目录,所以需要用栈来记录,必要时弹出栈顶。路径有几点需要特殊处理:

          1.栈中不保存任何/,遇到多个连续的/时跳过不处理即可

          2.遇到../的情况:返回上级目录,所以需要弹出栈顶元素(当栈非空时),栈空说明已经到了根目录

          3.栈中存储的就是一个个的路径名字,比如"a","b","c"

          4.遇到./的情况不作处理

代码:转载自https://blog.csdn.net/makuiyu/article/details/44497901

class Solution {
public:
string simplifyPath(string path) {
stack<string> ss; // 记录路径名
int i = 0;
while (i < path.size()) {
while (i < path.size() && '/' == path[i])
++i; //跳过斜线'/'
string s = ""; //记录两个斜线之间的路径名
while (i < path.size() && path[i] != '/')
s += path[i++];
if (".." == s && !ss.empty()) //除了到根目录以外都弹栈
ss.pop(); //如果是".."则需要弹栈,否则入栈
else if (s != "" && s != "." && s != "..")
ss.push(s);
}
if (ss.empty())
return "/"; //如果栈为空,说明为根目录,只有斜线'/'
string s = ""; //逐个连接栈里的路径名
while (!ss.empty()) {
s = "/" + ss.top() + s;  //注意顺序,先弹出来的要放在路径后面
ss.pop();
}
return s;
}
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80308406