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

栈:简化路径

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

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

  • 一个点 '.' 表示当前目录本身。
  • 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。
  • 任意多个连续的斜杠(即,'//' 或 '///')都被视为单个斜杠 '/'
  • 任何其他格式的点(例如,'...' 或 '....')均被视为有效的文件/目录名称。

返回的 简化路径 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/' 。
  • 最后一个目录名(如果存在)不能 以 '/' 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。

返回简化后得到的 规范路径 。

示例 1:

        输入:path = "/home/"

        输出:"/home"

        解释:应删除尾随斜杠。

示例 2:

        输入:path = "/home//foo/"

        输出:"/home/foo"

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

示例 3:

        输入:path = "/home/user/Documents/../Pictures"

        输出:"/home/user/Pictures"

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

示例 4:

        输入:path = "/../"

        输出:"/"


求解思路:栈的思路处理..(上级目录)的情况 + 从头拼接所有路径

数据结果使用双端队列就能满足。

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {public String simplifyPath(String path) {String[] pathArr = path.split("/"); // 分割之后会出现{空字符串 . 目录名 .. 路径名}情况Deque<String> deque = new ArrayDeque<>();for (String str : pathArr) {if ("..".equals(str)) {// ".." == str写法是不行的if (!deque.isEmpty()) { // 放在这里判断,如果和前面的if合并,这种/../情况会判断错误deque.removeLast();}} else if (str.length()>0 && !".".equals(str)) {deque.addLast(str);}}StringBuilder sb = new StringBuilder();if (deque.isEmpty()) {sb.append("/");} else {while (!deque.isEmpty()) {sb.append('/');sb.append(deque.pollFirst());}}return sb.toString();}
}

练习地址:71. 简化路径 - 力扣(LeetCode)

http://www.xdnf.cn/news/1462843.html

相关文章:

  • 手写MyBatis第51弹:深入解析MyBatis分页插件原理与手写实现
  • 改 TDengine 数据库的时间写入限制
  • Bug 排查日记:打造高效问题定位与解决的技术秘籍
  • GCC编译器深度解剖:从源码到可执行文件的全面探索
  • 残差连接与归一化结合应用
  • 解决网络太慢问题
  • C++《C++11》(上)
  • 基于单片机智能热水壶/养生壶设计
  • 用 epoll 实现的 Reactor 模式详解(含代码逐块讲解)
  • Vue3源码reactivity响应式篇之EffectScope
  • Android 应用进程启动
  • 趣味学RUST基础篇(构建一个命令行程序2重构)
  • 基于FPGA实现数字QAM调制系统
  • AiPPT生成的PPT内容质量怎么样?会不会出现逻辑混乱或数据错误?
  • 一键生成PPT的AI工具排名:2025年能读懂你思路的AI演示工具
  • 深度学习——迁移学习
  • 鸿蒙:获取UIContext实例的方法
  • Spring Boot+Nacos+MySQL微服务问题排查指南
  • 国产化PDF处理控件Spire.PDF教程:如何在 Java 中通过模板生成 PDF
  • 抓虫:sw架构防火墙服务启动失败 Unable to initialize Netlink socket: 不支持的协议
  • 还有人没搞懂住宅代理IP的属性优势吗?
  • java解析网络大端、小端解析方法
  • 信息安全基础知识
  • 云原生部署_Docker入门
  • 将 Android 设备的所有系统日志(包括内核日志、系统服务日志等)完整拷贝到 Windows 本地
  • android View详解—动画
  • Kali搭建sqli-labs靶场
  • modbus_tcp和modbus_rtu对比移植AT-socket,modbus_tcp杂记
  • 《sklearn机器学习——聚类性能指数》同质性,完整性和 V-measure
  • 从 Prompt 到 Context:LLM OS 时代的核心工程范式演进