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。
相关推荐
张洛闻Eren18 小时前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
ltl19 小时前
Linux 异步 I/O:epoll 与 io_uring 对比
linux
ltl19 小时前
压缩算法工程实践:吞吐、比率与 CPU 权衡
linux
fiveym20 小时前
01 - iPXE + Clonezilla 网络装机原理解析
linux·运维·服务器·网络
虎头金猫20 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
dog25020 小时前
网络优化,还是降低各阶矩
服务器·网络·php
反转180度21 小时前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt
雨辰AI21 小时前
RAG 知识库搭建:基于人大金仓构建信创运维问答机器人|全栈国产化落地完整版
运维·ai·机器人·ai编程
-今昭-1 天前
Ansible
linux·运维·ansible
星野川崎2061 天前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商