LeetCode 071 Simplify Path
2015-10-06 15:47
351 查看
题目描述
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”.
分析
“.”表示当前路径,不打印“..”表示上级路径,其左边第一个有效路径略过
可以先用“/”分隔Path,然后用栈操作,最后组合结果
代码
[code] public static String simplifyPath(String path) { if (path == null) { return null; } String[] names = path.split("/"); int eat = 0; LinkedList<String> stack = new LinkedList<String>(); for (int i = names.length - 1; i >= 0; i--) { String token = names[i]; // token是"..", 表示上级路径,前一个路径不打印 // token是".", 表示当前路径,自身不打印 // token是"", 表示为两个"/"相连,不做操作 // eat>0,表示左边不打印 // 否则,将token入栈 if (token.equals("..")) { eat++; } else if (token.equals(".")) { // do nothing } else if (token.equals("")) { // do nothing } else { if (eat > 0) { eat--; } else { stack.push(token); } } } StringBuilder s = new StringBuilder(); s.append("/"); // 最后一个不加"/",所以while判断条件是>1 while (stack.size() > 1) { s.append(stack.pop()); s.append("/"); } // 最后一个不加"/" if (!stack.isEmpty()) { s.append(stack.pop()); } return s.toString(); }
参考
参考链接相关文章推荐
- 大数据之数据挖掘理论笔记 聚类问题之K-means
- 被锁 和解锁
- 【002】有符号数据传递给无符号变量
- 带GPG签名的Git tag
- [LeetCode-169] Majority Element(找出数组中超过一半元素)
- 常规load方式
- oracle9
- iOS UITableView
- Linux块设备驱动之内存模拟块设备
- 获取app的主窗口,返回主视图界面
- mybatis解决字段名与实体类属性名不相同的冲突
- 一个Go推送服务器集群:gopush-cluster
- jquery 实现回到顶部
- Linux command 汇总(未完待续)
- 趁我酒醉后专车司机想要非礼我
- python学习总结归纳目录
- [九度OnlineJudge][剑指Offer]题目1386:旋转数组的最小数字
- ArcGIS常见的错误
- Mysql数据引擎的选择
- ARM面试题