简化路径,使用“/”对原数组进行分割,然后使用一个双端队列将元素进行头插
一旦遇到.或者“”就跳过;
遇到“..”的时候,如果队列不为空,则弹出队列后面的元素,如果队列为空,则continue;
其他的情况直接尾插即可。
最后将队列中的元素从头依次弹出即可。
public static String simplifyPath(String path) {
String[] strs = path.split("/");
StringBuilder sb = new StringBuilder();
Deque<String> queue = new LinkedList<>();
for (int i = 0; i < strs.length; i++) {
if (strs[i].equals("") || strs[i].equals(".")) continue;
else if (strs[i].equals("..")) {
if (!queue.isEmpty()) queue.pollLast();
else continue;
} else {
queue.offer(strs[i]);
}
}
if (queue.isEmpty()) return "/";
while (!queue.isEmpty()) {
sb.append("/" + queue.pollFirst());
}
return sb.toString();
}