
参考了leetcode的官方题解,用/分割字符串就能解决多个/的问题,利用栈后进先出,碰到..就回退出栈,空字符串和.不用处理,其余正常的目录就入栈,最后双端链表从头拼接就是结果
java
class Solution {
public String simplifyPath(String path) {
Deque<String> deque = new LinkedList<>();
String[] split = path.split("/");
//1.向双端链表中放入符合要求的目录
for (String s : split) {
//1.1如果目录是..那么就要回到上级目录也就是出栈
if (s.equals("..")) {
if (!deque.isEmpty()) {
deque.pollLast();
}
} else if (s.length() > 0 && !s.equals(".")) {
//1.2如果是正常的目录就放入栈
deque.addLast(s);
}
}
//2.将双端链表从后向前拼接就是结果
//2.1双端链表为空那么就是根目录
if (deque.isEmpty()) {
return "/";
}
//2.2双端链表不为空则拼接成完整路径
StringBuilder stringBuilder = new StringBuilder();
for (String s : deque) {
stringBuilder.append("/").append(s);
}
return stringBuilder.toString();
}
}