【LeetCode】71. Simplify Path

    xiaoxiao2021-03-25  110

    题目描述

    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

    最新回复(0)