问题描述
https://leetcode.com/problems/simplify-path/#/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".
算法
使用spli('/')
切割字符串,如/a/./b/../../c/
切割为:['a','.','b','..','.','c','']
,然后就好办了。使用一个栈来存储路径,然后遇到['.','']
就跳过去,遇到'..'
就将栈的最近元素弹出。
代码
public String simplifyPath(String path) {
Stack<String> stack = new Stack<>();
for(String dir:path.split("/")) {
if("..".equals(dir)) {
if(!stack.isEmpty())
stack.pop();
} else if(".".equals(dir)) {
continue;
} else {
if(!"".equals(dir)) {
stack.push(dir);
}
}
}
String r = "";
for(String dir:stack) {
r = r + "/" + dir;
}
return "".equals(r)?"/":r;
}