首页 > 编程语言 >数据结构与算法之栈: LeetCode 71. 简化路径 (Ts版)

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

时间:2025-01-18 21:59:28浏览次数:3  
标签:斜杠 .. 示例 之栈 Ts 71 home path 目录

简化路径

描述

  • 给你一个字符串 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("/");
};

标签:斜杠,..,示例,之栈,Ts,71,home,path,目录
From: https://blog.csdn.net/Tyro_java/article/details/145112805

相关文章

  • UTS Open '21 P6 - Terra Mater
    传送门前言本题是一道很好的“dp”题,无论是正难反易,还是模型转化都值得称赞,尤其是最后的神之一手,让我大脑宕机。题意描述给定一个长度为\(N\)的序列\(H\),修改不超过\(K\)个数,使得\(\max_{1}^{N-1}{H_{i+1}-H_i}\)最小。\(2\leN\le2\times10^5\),\(0\leK......
  • [BZOJ P2771] 天才ACM
    [BZOJP2771]天才ACM传送门朴素算法枚举终点\(r\),对区间\([l,r]\)排序求校验值\(sum\),比较\(sum\)和\(t\)$sum\let$ r++$sum>t$l=++r,ans++时间复杂度N2logN初步优化考虑校验值单调不下降,可枚举左端点l时二分右端点r,再对区间l~r求校验值,更新方法......
  • 爬虫入门之Requests库一篇学会
    在爬虫开发中,request模块或类扮演着至关重要的角色。以下是它主要的作用:发起网络请求:这是request最基本的功能,通过它向目标网站发送HTTP请求,获取网页内容。可以指定请求方式(GET、POST等),并能携带参数、数据、头部信息等。处理响应结果:当服务器返回响应后,request可以帮......
  • Vue3+TS笔记
    创建工程:npminitvue@latestVue3工程结构在main.js中:引入的vue更轻量,引入vue是一个更精简版的名为createApp的工厂函数import{createApp}from'vue'importAppfrom'./App.vue'createApp(App).mount('#app')vm实例对象上有一个mount方法,不是原型上的$mou......
  • Conditional render 1 of 3 components on button click (react)
    题意:在按钮点击时有条件地渲染三个组件中的一个(React)问题背景:I'mnewtoreactandbeenstrugglingtofigureouthowtorenderthecomponentsinsidethecontainerdependingonwhichbuttonhasbeenclicked.我刚接触React,一直在努力弄明白如何根据点击了哪个按......
  • 前端TS 时间格式化函数
    /***时间日期转换*@paramdate当前时间,newDate()格式*@paramformat需要转换的时间格式字符串*@returns返回拼接后的时间字符串*/exportfunctionformatDate(date:Date,format:string):string{constweek:{[key:string]:string}={'0'......
  • JSP旅游资源及线路管理系统uun71(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着旅游业的蓬勃发展,旅游资源的有效管理和线路的优化设计成为提升旅游体验的关键。传统的旅游资源管理方式存在信息更新慢、线......
  • 【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理
    近期学习了一下GMTSAR,记录一下使用过程电脑为处理器为i7-13700K,给虚拟机分配了32G内存。大致的处理流程命令如下(因为懒得截图以及复制起来简单直接写在了txt文本里)虚拟机挂载共享文件夹虚拟机的安装教程CSDN有很多,可以看最新的教程,去官网下载新版(但是要创建账号填写相关......
  • UTS Open '21 P7 - April Fools
    传送门前言本题是笔者keysky与同学yangbaich讨论+推式子一整个晚上以及讨论前ybc的一整个下午做出来的,综合起来是\(34\)个转移方程,对于整道题来说,贡献大抵为我\(2\)他\(8\)。我们的做法不一定是最优解,甚至可以说是较劣且复杂的,但时间是稳定能过且没卡常的,同时对于\(\tex......
  • MiniMax TTS新模型T2A-01-HD:情感控制10秒克隆限时免费;真人表演+文本命令,Kinetix精准生
      开发者朋友们大家好: 这里是**「RTE开发者日报」**,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......