当前位置: 首页 > article >正文

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

简化路径

  • https://leetcode.cn/problems/simplify-path/description/

描述

  • 给你一个字符串 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:模拟栈

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:栈

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("/");
};

http://www.kler.cn/a/502595.html

相关文章:

  • 用 Python 从零开始创建神经网络(十九):真实数据集
  • 《AI赋能鸿蒙Next,开启智能关卡设计新时代》
  • 《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题
  • pyqt鸟瞰
  • docker的数据卷和自定义镜像
  • CF 371A.K-Periodic Array(Java实现)
  • 介绍PyTorch张量
  • OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效
  • 自动化运维:提升效率与可靠性的利器
  • 如何检查Mac电脑是否已安装Python环境
  • 运维加薪技术——微服务拆分规范
  • Python编程中的两种主要的编程模式
  • 插入图层到地图文档
  • 关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点
  • iOS 逆向学习 - iOS Application Structure:iOS 应用程序结构
  • 【Linux网络编程】数据链路层 | MAC帧 | ARP协议
  • PyQt5 超详细入门级教程上篇
  • pdf提取文本,表格以及转图片:spire.pdf
  • 一文通透OpenVLA及其源码剖析——基于Prismatic VLM(SigLIP、DinoV2、Llama 2)及离散化动作预测
  • DVWA靶场CSRF漏洞通关教程及源码审计
  • 浏览器安全(同源策略及浏览器沙箱)
  • 安全运维管理 10.9密码管理
  • 0基础跟德姆(dom)一起学AI 自然语言处理12-注意力机制介绍1
  • Canvas简历编辑器-选中绘制与拖拽多选交互方案
  • 计算机网络之---无线通信概述
  • 【江协STM32】11-2/3 W25Q64简介、软件SPI读写W25Q64