421 · 简化路径

步骤 1:理解题意

Unix 绝对路径按 / 切分后得到若干 token:

  • 空串 """." → 直接忽略
  • ".." → 返回上一级(弹出栈顶,若栈空则不动)
  • 其他合法目录名 → 压栈
    最后再把栈中目录用 / 拼起来,最前面补一个 / 即为简化结果。
    边界:空栈时返回 "/"

步骤 2:写出暴力/朴素解法

直接 split("/") 后 for-loop 处理,用列表模拟栈,最后再 join,代码较长但思路直观。

步骤 3:寻找冗余与优化点

  • 不必正则或多次字符串拼接,用 Deque<String> 一次入栈出栈即可。
  • 注意连续 / 产生的空串 token。
  • 时间 O(n),额外空间 O(n)(栈大小)。

步骤 4:给出最优"快刷"版本

java 复制代码
public String simplifyPath(String path) {
    Deque<String> stk = new ArrayDeque<>();
    // 按 / 切分
    for (String tok : path.split("/")) {
        if (tok.isEmpty() || tok.equals(".")) continue;
        if (tok.equals("..")) {
            if (!stk.isEmpty()) stk.pollLast();
        } else {
            stk.offerLast(tok);
        }
    }
    return "/" + String.join("/", stk);
}
  • 时间:O(n)
  • 空间:O(n)
  • 可直接 copy 通过 LintCode 421。
相关推荐
wadesir2 小时前
Debian集群容量规划(从零开始掌握Linux服务器集群资源评估与优化)
linux·服务器·debian
GHL2842710902 小时前
redis编译调试(linux)
linux·数据库·redis
食咗未2 小时前
Linux USB HOST EXTERNAL USB TO ETH ADAPTER
linux·网络·驱动开发
黑猫学长呀2 小时前
【嵌入式系统科普】第2篇:什么是uboot/kernel/根文件系统/BootLoader/操作系统/bios/设备树
linux·arm开发·单片机·嵌入式硬件·arm
不学懂K8S不改名2 小时前
部署使用ES
运维·jenkins
文弱书生6562 小时前
7-Robot类大体框架
linux·单片机·嵌入式硬件
jerryinwuhan2 小时前
linux_shell_1226_1
linux
南山nash2 小时前
docker存储卷详解
运维·docker·容器
羽飞2 小时前
GCC ABI炸弹
linux·c++·python