LeetCode 71. 简化路径,经典栈应用题。
思路
- 空字符串或 . → 忽略
- .. → 栈非空则弹出(返回上一级)
- 其他 → 入栈
Java 实现
class Solution {
public String simplifyPath(String path) {
Deque<String> stack = new ArrayDeque<>();
// 按 / 分割
for (String part : path.split("/")) {
if (part.isEmpty() || ".".equals(part)) {
// 空字符串(多个/)或当前目录,忽略
continue;
}
if ("..".equals(part)) {
// 返回上一级,栈非空则弹出
if (!stack.isEmpty()) {
stack.pollLast();
}
} else {
// 有效目录名,入栈
stack.offerLast(part);
}
}
// 拼接结果
StringBuilder sb = new StringBuilder();
for (String dir : stack) {
sb.append("/").append(dir);
}
return sb.length() == 0 ? "/" : sb.toString();
}
}
关键点
| 多个 / | split("/") 产生空字符串,直接忽略 |
| . | 当前目录,忽略 |
| .. | 栈非空则 pollLast(),模拟返回上级 |
| 普通目录名 | offerLast() 入栈 |
| 根目录 | 栈为空时返回 "/" |
复杂度
- 时间复杂度:O(n),n 为路径长度
- 空间复杂度:O(n),栈的空间




