前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
Corner Cases:
这个题目想了下,用堆来解决,用正则表达式分割。不过貌似效率不咋的
Your runtime beats 9.13% of java submissions.
- 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"
.
import java.util.regex.Pattern;
public class Solution {
public String simplifyPath(String path) {
Stack<String> stack = new Stack<String>();
stack.push("/");
StringBuffer sb = new StringBuffer("");
String[] results = Pattern.compile("/+").split(path);
for(String item : results){
if(!item.equals("")){
if(item.equals(".")) continue;
if(item.equals("..")){
if(!(stack.peek().equals("/"))) stack.pop();
}else{ stack.push(item);}
}
}
while(!stack.empty()){
sb.insert(0,stack.pop());
sb.insert(0,"/");
}
sb.delete(0,2);
if(sb.length() == 0) sb.append("/");
return sb.toString();
}
}