小哆啦解题记:文件系统迷宫的逃脱计划

71. 简化路径 - 力扣(LeetCode)

话说那一天,小哆啦误闯进了一个诡异的世界 ------ Unix 文件系统。

那是一片由 / 铺就的迷宫,空气中弥漫着点(.)和两个点(..)的神秘气息。

他抬头一看,路径牌上赫然写着:

bash 复制代码
/usr/./bin/../lib///node/..///modules/

他揉揉眼,再看一次:

bash 复制代码
/usr/./bin/../lib///node/..///modules/

"这都是什么鬼!"小哆啦差点精神分裂,"我要是照这玩意儿走路,迟早绕回家门口。"


🎯 任务目标:化繁为简

Unix 路径简化规则有三条:

  1. . 表示"原地踏步",可以忽略
  2. .. 表示"后退一步",即返回上级目录
  3. 多个 /,就当一个 /

小哆啦盯着那串路径,脑子里只有一个念头:我要把这玩意儿整明白,整整齐齐地,像个程序员。


🧱 第一尝试:用栈来逃生!

他翻出平时用的冒险小道具 ------ 栈 stack,对路径逐个碎片检查。

c 复制代码
function simplifyPath(path: string): string {
  const stack: string[] = [];
  const parts = path.split('/');

  for (const part of parts) {
    if (part === '' || part === '.') continue;
    if (part === '..') stack.pop();
    else stack.push(part);
  }

  return '/' + stack.join('/');
}

他一边处理一边自言自语:

"你是 .?你原地跳舞去。"

"你是 ..?那我就回退一步!"

"你是个正常路径名?进栈!"

这个方法真不赖,清晰、好懂、效果立竿见影。小哆啦拍手大笑:"完美,老派冒险者果然靠得住。"


🧪 第二方案:尝试神秘的函数式魔法 ------ reduce

但就在他准备离开迷宫的那一刻,他看见了墙角一张泛黄的卷轴,写着古老而高深的咒语:

javascript 复制代码
Array.prototype.reduce()

"传说中可以将任何过程,化为状态演化的纯函数式炼金术......"

小哆啦眼前一亮,试试又何妨?

ini 复制代码
function simplifyPath(path: string): string {
  const parts = path.split('/');
  const simplified = parts.reduce<string[]>((acc, part) => {
    if (part === '' || part === '.') return acc;
    if (part === '..') acc.pop();
    else acc.push(part);
    return acc;
  }, []);
  return '/' + simplified.join('/');
}

只用一行 reduce,路径状态就像河流一样自然流淌,从原始混沌流向简洁秩序。

小哆啦感叹:"好家伙,我刚才还在用石锤敲怪兽,现在直接魔法化形了。"


🧠 栈 vs reduce 的究极对比:

对比项 栈写法 reduce 写法
思维模型 命令式(一步一步) 函数式(状态归纳)
代码量 稍多,易读 精简,表达集中
可扩展性 逻辑清晰,改动需控制语句结构 可组合性强,支持链式操作
适合人群 编程小白~中级者 喜欢函数式的优雅党
B格指数 ✨ ⭐⭐ ⭐⭐⭐⭐⭐("哇,reduce太酷了!")

💡 为啥 reduce 更像魔法?

因为你不再像栈那样手动推动流程,而是:

  • 先拆解:split('/')
  • 再过滤:忽略 ., '', 处理 ..
  • 再归约:路径一步步"演化",像生物体一样长成"最终状态"

这就是函数式编程最迷人的地方:你的代码,像一首逻辑诗。


🧘 小哆啦感悟

"路径简化,其实就像人生修行。"

  • . :原地打转,不动如山
  • ..:回头是岸,有时候后退也是前进
  • 多个 /:复杂不过是表象,背后其实很简单
  • reduce:简洁的思维,才是最强大的武器
相关推荐
To_OC3 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495643 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
爱刷碗的苏泓舒7 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽10 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米10 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠11 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA13 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel13 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客13 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化