首页 > 学院 > 开发设计 > 正文

53:Simplify Path

2019-11-06 08:50:58
字体:
来源:转载
供稿:网友

题目:Given an absolute path for a file (Unix-style), simplify it. For example, path = “/home/”, => “/home” path = “/a/./b/../../c/”, => “/c” Corner Cases: • Did you consider the case where path = “/../”? In this case, you should return “/”. • Another corner case is the path might contain multiple slashes ‘/’ together, such as “/home//foo/”. In this case, you should ignore redundant slashes and return “/home/foo”.

下面解法代码的思想及编写参考了网址https://github.com/soulmachine/leetcode#leetcode题解题目

代码如下:

/ 时间复杂度 O(n),空间复杂度 O(n)class Solution {public: string simplifyPath(const string& path) { vector<string> dirs; // 当做栈 for (auto i = path.begin(); i != path.end(); ) { ++i; auto j = find(i, path.end(), '/'); auto dir = string(i, j); if (!dir.empty() && dir != '.') { // 当有连续 '///' 时,dir 为空 if (dir == '..') { if (!dirs.empty()) dirs.pop_back(); } else dirs.push_back(dir); i = j; } ostringstream out; if (dirs.empty()) out << "/"; else { for (auto dir : dirs) out << "/" << dir; } return out.str(); }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表