// 以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
// 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);
// 两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
// 请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。
// 此外,规范路径必须是表示绝对路径的最短字符串。
#include "iostream"
#include "string"
#include "stack"
using namespace std;
class Solution
{
public:
string simplifyPath(string path)
{
stack<string> z;
string p;
int i, size = path.size();
while (path[i] == '/')
{
i++;
}
for (; i < size; i++)
{
p = "";
while (path[i] != '/' && i < size)
{
p += path[i];
i++;
}
if (p == "..")
{
if (!z.empty())
{
z.pop();
}
}
else if (p != ".")
{
z.push(p);
}
while (i < size && path[i + 1] == '/')
{
i++;
}
}
if (z.empty())
{
return "/";
}
string ans = "";
ans = '/'+z.top();
z.pop();
while (!z.empty())
{
ans = '/' + z.top() + ans;
z.pop();
}
return ans;
}
};
int main(int argc, char const *argv[])
{
string path;
cin >> path;
Solution so;
cout << so.simplifyPath(path);
return 0;
}
【Leetcode】71.简化路径C++
猜你喜欢
转载自blog.csdn.net/weixin_44936889/article/details/104093146
今日推荐
周排行