首页 > 代码库 > [leetcode]Simplify Path
[leetcode]Simplify Path
问题描述:
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。