LeetCode 71 题又该怎么解答呢?希望下面的文章对大家有所帮助。
- path = "/home/",
- =>"/home"path = "/a/./b/../../c/",
- =>"/c"
解题思路
队列。从 index = 1 开始遍历 string,当遇到'/'时,计算上一个'/'到现在之间中间的内容,存在如下三种情况。
"." 或者 "",指的是当前路径,不做处理"..",指的是返回上一层目录,将队列中最后一个元素移除。 其他,指的是文件夹名称,将其加入队列最后一个元素。
可以在最开始时候,给路径名末端加上 "/",用以确保路径完整,最后一个元素一定会被合理处理,这样就不用对最后的元素做额外的考虑了。
AC 代码
- class Solution {
- public: string simplifyPath(string path) {
- if (path.empty()) return "";
- list 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;
- }
- };
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-10/20241082.html