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

【数据结构-栈】力扣71. 简化路径

给你一个字符串 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 风格绝对路径。

模拟

class Solution {
public:string simplifyPath(string path) {vector<string> stack;string res;int n = path.size();for(int i = 0; i < n;){while(i < n && path[i] == '/'){i++;}if(i == n){break;}int start = i;while(i < n && path[i] != '/'){i++;}string dir = path.substr(start, i - start);if(dir == ".."){if(!stack.empty()){stack.pop_back();}}else if(dir != "."){stack.push_back(dir);}}for(string& s : stack){res += "/" + s;}return res.empty() ? "/" : res;}
};

首先这道题的思路比较重要,我们可以观察输出后的路径,可以发现都是一条"/"加上一个目录。所以说我们需要的是path中的目录名,这是我们需要的,还有path中的…进行计算,来删除目录名。

所以我们就可以通过i来索引path中的元素,当path[i]为’/‘的时候,就跳过,让i指向’/‘后的第一个字母。
这时候我们要提取第一个字符到’/‘前的字符为止。所以我们可以用start记录i,然后让i继续++,直到’/'才停止。

然后我们将这个目录名记录为dir,然后如果是"…“的话,就将stack的栈顶元素弹出,如果是”."的话,就不进行操作,如果都不是,就推入stack中。

最后遍历stack,加到res中就行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【计算机网络 - 基础问题】每日 3 题(二十一)
  • YOLOv8 OBB win10+ visual 2022移植部署
  • 【2023次方 / B】
  • 王红梅老师ppt介绍算法设计一般过程---对上周csdn的补充----可以参考老版教师用书--单链表专题在介绍插入时介绍了正向思维方法,这是更详细的解释跟全面
  • iptables和nftables
  • 淘客系统开发之卷轴模式系统源码功能分析
  • 解锁视频生成新时代! 探索智谱CogVideoX-2b:轻松生成6秒视频的详细指南
  • ReKep——李飞飞团队提出的让机器人具备空间智能:基于视觉语言模型GPT-4o和关系关键点约束
  • C语言常见字符串函数模拟实现一:(strlen,strcpy,strcat,strcmp,strstr )
  • 最新最详细的Mastercam安装包下载安装教程(保姆级)
  • Go语言的垃圾回收(GC)机制的迭代和优化历史
  • 在HTML中添加图片
  • 使用vite+react+ts+Ant Design开发后台管理项目(二)
  • 张朝阳的物理课第三卷:量子力学的硬核探索与启发
  • 网页交互模拟:模拟用户输入、点击、选择、滚动等交互操作
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 30秒的PHP代码片段(1)数组 - Array
  • canvas绘制圆角头像
  • Date型的使用
  • Docker 笔记(2):Dockerfile
  • Github访问慢解决办法
  • JavaScript 基本功--面试宝典
  • Material Design
  • Netty源码解析1-Buffer
  • swift基础之_对象 实例方法 对象方法。
  • 技术胖1-4季视频复习— (看视频笔记)
  • 码农张的Bug人生 - 见面之礼
  • 前端面试题总结
  • 删除表内多余的重复数据
  • 问题之ssh中Host key verification failed的解决
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • C# - 为值类型重定义相等性
  • ​Python 3 新特性:类型注解
  • ###项目技术发展史
  • #pragma pack(1)
  • $$$$GB2312-80区位编码表$$$$
  • (2)(2.10) LTM telemetry
  • (2)STL算法之元素计数
  • (20050108)又读《平凡的世界》
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Java入门)学生管理系统
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一一四)第九章编程练习
  • (转) ns2/nam与nam实现相关的文件
  • (转)平衡树
  • .bat文件调用java类的main方法
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net FrameWork简介,数组,枚举
  • .NET 分布式技术比较
  • .net 验证控件和javaScript的冲突问题
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • @property括号内属性讲解