Description
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".
Solution
Stack, time O(n), space O(n)
没什么难的,注意corner case就行了。
class Solution {
public String simplifyPath(String path) {
if (path == null) {
return null;
}
String[] tokens = path.split("/");
Stack<String> stack = new Stack<>();
for (String token : tokens) {
switch(token.trim()) {
case "":
case ".":
continue;
case "..":
if (!stack.empty()) {
stack.pop();
}
continue;
default:
stack.push(token);
continue;
}
}
if (stack.empty()) {
return "/";
}
StringBuilder sb = new StringBuilder();
while (!stack.empty()) {
sb.insert(0, stack.pop());
sb.insert(0, "/");
}
return sb.toString();
}
}