数据结构与算法之栈: LeetCode 71. 简化路径 (Ts版)

简化路径

描述

  • 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径

  • 在 Unix 风格的文件系统中规则如下

    • 一个点 '.' 表示当前目录本身
    • 此外,两个点 '...' 表示将目录切换到上一级(指向父目录)
    • 任意多个连续的斜杠(即,'//' 或 '///')都被视为单个斜杠 '/'
    • 任何其他格式的点(例如,'...' 或 '...')均被视为有效的文件/目录名称
    • 返回的 简化路径 必须遵循下述格式:
      • 始终以斜杠 '/' 开头
      • 两个目录名之间必须只有一个斜杠 '/'
      • 最后一个目录名(如果存在)不能 以 '/' 结尾
      • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '...')
  • 返回简化后得到的 规范路径

示例 1

复制代码
输入:path = "/home/"
输出:"/home"

解释:应删除尾随斜杠

示例 2

复制代码
输入:path = "/home//foo/"
输出:"/home/foo"

解释:多个连续的斜杠被单个斜杠替换。

示例 3

复制代码
输入:path = "/home/user/Documents/../Pictures"
输出:"/home/user/Pictures"

解释:两个点 "..." 表示上一级目录(父目录)。

示例 4

复制代码
输入:path = "/../"
输出:"/"

解释:不可能从根目录上升一级目录。

示例 5

复制代码
输入:path = "/.../a/../b/c/../d/./"
输出:"/.../b/d"

解释:"..." 在这个问题中是一个合法的目录名。

提示

  • 1 <= path.length <= 3000
  • path 由英文字母,数字,'.','/' 或 '_' 组成
  • path 是一个有效的 Unix 风格绝对路径

Typescript 版算法实现

1 ) 方案1:模拟栈

ts 复制代码
function simplifyPath(path: string): string {
    const stk = [];
    for (const s of path.split('/')) {
        if (!s || s === '.') {
            continue;
        }
        if (s !== '..') {
            stk.push(s);
        } else if (stk.length > 0) {
            stk.pop();
        }
    }
    return '/' + stk.join('/');
};

2 ) 方案2:栈

ts 复制代码
function simplifyPath(path: string): string {
    const names = path.split("/");
    const stack = [];
    for (const name of names) {
        if (name === "..") {
            stack.length && stack.pop()
        } else if (name.length && name !== ".") {
            stack.push(name);
        }
    }
    return "/" + stack.join("/");
};
相关推荐
吃好睡好便好8 分钟前
在Matlab中绘制抛物三维曲面图
开发语言·人工智能·学习·算法·matlab·信息可视化
伯远医学16 分钟前
Nat. Methods | 邻近标记技术:活细胞中捕捉分子互作的新利器
java·开发语言·前端·javascript·人工智能·算法·eclipse
刘永鑫Adam35 分钟前
Nature Microbiology | 基于TRACS算法的跨多界宏基因组数据菌株水平溯源推演
算法
小O的算法实验室37 分钟前
2026年SEVC,面向无人机辅助边缘计算的自适应群体智能算法,深度解析+性能实测
算法·边缘计算·智能算法·智能算法改进
高锰酸钾_43 分钟前
计算机网络-网络层-路由算法与路由协议
计算机网络·算法·智能路由器
智者知已应修善业1 小时前
51单片机4按键控制共阳LED霓虹灯切换1整体闪烁2流水下3流水上4间隔闪烁】2023-10-27
c++·经验分享·笔记·算法·51单片机
XW-ABAP1 小时前
SAP ABAP 实现类似百度谷歌搜索引擎基础算法之一的,编辑距离算法
算法
嵌入式小能手1 小时前
飞凌嵌入式ElfBoard-进程间的通信之信号处理sigaction
linux·算法·信号处理
re林檎1 小时前
算法札记——5.14
算法
研究点啥好呢1 小时前
DJI 机器人视觉算法工程师 面试题精选:10道高频考题+答案解析(背诵版)
算法·面试·机器人·dji