题目
Given an absolute path for a file (Unix-style), simplify it.
For example,
path ="/home/"
, =>"/home"
path ="/a/./b/../../c/"
, =>"/c"
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下的最简路径,Unix文件的根文件夹为"/","."表示当前文件夹,".."表示上级文件夹。
使用Stack来进行处理。
public String simplifyPath(String path) { Stack<String> stack = new Stack<String>(); String str = ""; for (int i = 0; i < path.length(); i++) { if (path.charAt(i) == '/') { if (str.equals("..")) { if (!stack.isEmpty()) { stack.pop(); } } else if (!str.equals(".") && !str.equals("")) { stack.push(str); } str = ""; } else { str += path.charAt(i); } } if (str.equals("..")) { if (!stack.isEmpty()) { stack.pop(); } } else if (!str.equals(".") && !str.equals("")) { stack.push(str); } if (stack.isEmpty()) { return "/"; } String re = ""; while (!stack.isEmpty()) { re = "/" + stack.pop() + re; } return re; }