栈与队列中等1 种解法
#71简化路径
把 Unix 风格绝对路径转换为规范路径。
#字符串#栈
解题主线
01
按斜杠切分后,普通目录入栈,.. 弹出上级,空段与 . 忽略。
解法 1:目录栈
扫描路径段并维护规范目录序列,最后从栈底到栈顶用斜杠连接。
时间复杂度
O(n)
空间复杂度
O(n)
java
import java.util.ArrayDeque;
import java.util.Deque;
final class Solution {
public String simplifyPath(String path) {
Deque<String> directories = new ArrayDeque<>();
for (String part : path.split("/")) {
if (part.isEmpty() || part.equals(".")) continue;
if (part.equals("..")) {
if (!directories.isEmpty()) directories.removeLast();
} else {
directories.addLast(part);
}
}
if (directories.isEmpty()) return "/";
return "/" + String.join("/", directories);
}
}扫描路径段并维护规范目录序列,最后从栈底到栈顶用斜杠连接。
边界与易错点
- 根目录上的 .. 不应继续向上,也不应作为普通目录入栈。
- 名称如 ... 是普通目录,只有恰好为 . 或 .. 才有特殊含义。
- ArrayDeque 比遗留 Stack 更适合作为栈。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
medium/Q071_simplifyPath.java