简化路径(String.join()与栈)
class Solution {
public String simplifyPath(String path) {
// 一开始用Deque<>实现栈,结果顺序错误
// 测试用例:"/home//foo/"
// 输出:"/foo/home"
// 预期结果:"/home/foo"
// Deque<String> stack = new LinkedList<>();
// String[] items = path.split("/");
// for(String item : items){
// if(item.isEmpty() || item.equals(".")) continue;
// if(item.equals("..")){
// if(!stack.isEmpty()) stack.pop();
// }else{
// stack.push(item);
// }
// }
// return "/" + String.join("/", stack);
Stack<String> stack = new Stack<>();
String[] items = path.split("/");
for(String item : items){
if(item.isEmpty() || item.equals(".")) continue;
if(item.equals("..")){
if(!stack.isEmpty()) stack.pop();
}else{
stack.push(item);
}
}
return "/" + String.join("/", stack);
}
}
// 双向队列 push 方法是将一个元素添加到头部
// 0
// "a"
// 0 1
// "b" "a"
// 0 1 2
// "c" "b" "a"
// 栈 push 方法是将一个元素压入栈
// 2 "c"
// 1 "b"
// 0 "a"
// String.join()时从 0 开始索引