【Leetcode】71.简化路径C++

在这里插入图片描述在这里插入图片描述

// 以 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;
}
发布了103 篇原创文章 · 获赞 128 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/104093146