您的位置:首页
[leetcode]Simplify Path
2018-02-05 14:45
288 查看
问题描写叙述:
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".
基本思想:
此题能够用一个堆栈存储每层目录或文件。假设两个/之间的内容是".."就弹出栈顶元素。假设遇到“.”或“”就不变。基本思想就是这样。但要考虑一些corner case。如“/../”,"///"等
代码:
public String simplifyPath(String path) { //Java // return "/"; path = path.trim(); if(path.equals("/")) return "/"; List<String> stack = new LinkedList<String>(); int top = -1; String tmp = path; while(!tmp.equals("")){ if(tmp.startsWith("/")) tmp = tmp.substring(1); if(tmp.equals("")) break; if(tmp.contains("/")){ int pos = tmp.indexOf("/"); String file = tmp.substring(0,pos); tmp = tmp.substring(pos); if(file.equals(".")|| file.equals("")) continue; if(file.equals("..")){ if(top>-1) top--; continue; } stack.add(++top,file); } else { String file = tmp; tmp = ""; if(file.equals(".")) continue; if(file.equals("..")){ if(top>-1) top--; continue; } stack.add(++top,file); } } //generate path; String rpath = "/"; for(int i = 0; i <=top ; i++) rpath += stack.get(i)+"/"; if(top >=0) rpath = rpath.substring(0,rpath.length()-1); return rpath; }
相关文章推荐
- 【LeetCode】Simplify Path 解题报告
- [leetcode] simplify path
- 【LeetCode with Python】 Simplify Path
- leetcode[71]Simplify Path
- leetcode 100: Simplify Path
- [leetcode]Simplify Path
- leetcode: 71. Simplify Path
- 【LeetCode】Simplify Path 解题报告
- LeetCode---Simplify Path
- Simplify Path -- LeetCode
- LeetCode_Simplify Path
- [LeetCode]Simplify Path
- [leetcode] Simplify Path
- LeetCode - Refresh - Simplify Path
- LeetCode(45) Simplify Path
- 【leetcode】Simplify Path
- leetcode[70] Simplify Path
- LeetCode 71 Simplify Path
- [LeetCode]Simplify Path
- LeetCode71 Simplify Path