LeetCode(71) Simplify Path
来源:互联网 发布:联发科x10优化 编辑:程序博客网 时间:2024/06/05 15:59
题目
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = “/home/”, => “/home”
path = “/a/./b/../../c/”, => “/c”
click to show corner cases.
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”.
分析
这道题的要求是简化一个Unix风格下的文件的绝对路径。
字符串处理,由于”..”是返回上级目录(如果是根目录则不处理),因此可以考虑用栈记录路径名,以便于处理。需要注意几个细节:
重复连续出现的’/’,只按1个处理,即跳过重复连续出现的’/’;
如果路径名是”.”,则不处理;
如果路径名是”..”,则需要弹栈,如果栈为空,则不做处理;
如果路径名为其他字符串,入栈。
最后,再逐个取出栈中元素(即已保存的路径名),用’/’分隔并连接起来,不过要注意顺序呦。
时间复杂度:O(n)
空间复杂度:O(n)
AC代码
class Solution {public: string simplifyPath(string path) { if (path.empty()) return string(); stack<string> st; int len = path.length(); for (int i = 0; i < len;) { //跳过/ while (i < len && path[i] == '/') i++; //找到以/分隔的目录名 string s = ""; while ( i < len && path[i] != '/') { s += path[i]; i++; } //如果为..则需要弹栈 if (s == ".." && !st.empty()) st.pop(); //如果既不是. 也不是.. 则需要入栈 else if (s != "" && s != "." && s != "..") st.push(s); } //如果栈空,则为根目录 if (st.empty()) { return "/"; } //否则链接各级目录并返回 string ret; while (!st.empty()) { ret = '/' + st.top() + ret; st.pop(); } return ret; }};
GitHub测试程序源码
0 0
- LeetCode(71) Simplify Path
- LeetCode 71 Simplify Path
- LeetCode(71) Simplify Path
- [leetcode 71] Simplify Path
- leetcode || 71、Simplify Path
- LeetCode(71) Simplify Path
- leetcode 71: Simplify Path
- 【leetcode】【71】Simplify Path
- leetcode 71 Simplify Path
- LeetCode 71 Simplify Path
- Leetcode 71 Simplify Path
- leetcode-71 simplify path
- LeetCode #71 Simplify Path
- Leetcode NO.71 Simplify Path
- [leetcode-71]Simplify Path(C)
- LeetCode 71 Simplify Path (栈)
- 【LeetCode】C# 71、Simplify Path
- 【Leetcode】71 Simplify path 简化路径
- ZOJ-3829-Known Notation
- 关于CCPlatform Macro.h中的宏定义
- My view on future ebusiness
- mysql 学习记录(三)--字段
- QT容器学习
- LeetCode(71) Simplify Path
- POJ 1222 EXTENDED LIGHTS OUT
- HDU 2108 Shape of HDU(计算几何)
- kvm使用命令行创建虚拟机并通过vnc安装系统
- HDU 2109 Fighting for HDU(水~)
- leetcode | Valid Parentheses
- Unity Shader编程(2)Unity Shader初步
- 条款21:static对象引起的多线程安全性
- C#如何调用以管理员身份运行的cmd命令提示符