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

leetcode71:简化路径

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

步骤1:问题定义

输入:

  • 一个字符串 path,表示 Unix 风格的绝对路径。

输出:

  • 一个字符串,表示简化后的规范路径。

计算问题性质:

  • 将输入的绝对路径字符串转换为一个简化的路径字符串,遵循 Unix 文件系统的规则。

限制条件:

  • 输入字符串长度在 1 到 3000 之间。
  • 字符串由英文字母、数字、‘.’、‘/’ 或 ‘_’ 组成。
  • 字符串是一个有效的 Unix 风格绝对路径。

边界条件:

  • 输入路径可能以 ‘/’ 结尾,需要处理。
  • 输入路径可能包含多个连续的 ‘/’,需要合并。
  • 输入路径可能包含 ‘.’ 或 ‘…’,需要根据规则处理。
  • 输入路径可能为空或仅包含 ‘/’。

步骤2:解题步骤

  1. 将输入路径按照 ‘/’ 分割成多个部分。
  2. 遍历分割后的部分,忽略空字符串和 ‘.’。
  3. 遇到 ‘…’ 时,如果栈不为空,则弹出栈顶元素(返回上一级目录)。
  4. 将非 ‘.’ 和 ‘…’ 的部分压入栈中。
  5. 将栈中的元素连接成字符串,每个元素之间用 ‘/’ 分隔。
  6. 如果栈为空,返回根目录 ‘/’。

算法设计思路:

  • 使用栈来处理路径的层级结构,因为栈的后进先出特性符合目录的上下级关系。

时间复杂度:O(n),其中 n 是输入路径的长度,因为每个字符最多被处理两次(分割和压栈/弹栈)。 空间复杂度:O(n),最坏情况下栈中可能包含所有分割后的部分。

步骤3:C++ 代码实现

步骤4:启发

  • 使用栈处理具有层级结构的数据是一种常见且有效的方法。
  • 在处理字符串问题时,可以使用 istringstream 和 getline 方便地分割字符串。
  • 算法的优化可以考虑减少不必要的字符串操作,例如直接在输入字符串上操作,而不是创建多个字符串副本。

步骤5:实际应用

应用场景:文件系统路径解析

  • 在文件系统中,用户输入的路径需要被解析并转换为实际的文件或目录路径。
  • 例如,在开发文件浏览器或命令行工具时,用户可能输入复杂的路径字符串,程序需要将其简化并定位到正确的文件或目录。

具体实现:

  • 在文件浏览器中,用户输入的路径字符串通过 simplifyPath 函数处理后,可以用来导航到正确的文件或目录。
  • 在命令行工具中,简化后的路径可以用于执行文件操作,如复制、移动或删除文件。

相关文章:

leetcode71:简化路径

给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下&#xff1a; 一个点 . 表示当前目录本身。此外&#xff0c;两个点 ..…...

nodejs入门教程4:nodejs创建第一个应用

1. 安装 Node.js 首先&#xff0c;确保你的计算机上已经安装了 Node.js。如果还没有安装&#xff0c;可以从官方网站&#xff08;https://nodejs.org&#xff09;下载并安装最新的 LTS 版本。安装完成后&#xff0c;你可以在命令行或终端中运行以下命令来验证安装&#xff1a;…...

启用 iPhone 原生的五笔输入

聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘&#xff0c;其实其他键盘&#xff08;双拼&#xff0c;外语键盘、第三方输入法&#xff09;也是类似的添加方式。 ‍ 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法&#xff0c;但其实…...

这个工具让你轻松开发一个带AI功能的Notion

这个工具让你轻松开发一个带AI功能的Notion Plate 是一款由 AI 加持的富文本编辑器&#xff0c;旨在帮助开发者创建功能强大的 WYSIWYG 文本编辑工具。本文将介绍 Plate 的基本信息、特点、以及如何快速上手使用。 软件简介 Plate 由 udecode 开发&#xff0c;基于 React 和 S…...

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…...

穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略

穿越死锁的迷雾:pthread_mutex_lock的终极挑战与破解策略 一、死锁的基本概念二、pthread_mutex_lock 出现死锁的原因三、pthread_mutex_lock 出现死锁的表现四、处理pthread_mutex_lock 出现死锁的方法1. 避免死锁1.1 遵循锁的顺序原则1.2 使用定时锁1.3 使用尝试锁1.4 使用递…...

Dockerfile制作Oracle19c镜像

Dockerfile文件 cat > Dockerfile << EOF # 使用 Oracle Linux 8 作为基础镜像 FROM oraclelinux:8# 复制 Oracle 19c 安装包 COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp/# 安装 Oracle 19c 数据库和依赖 RUN yum localinstall -y /tmp/oracle-database-ee-…...

【时间之外】IT人求职和创业应知【23】

目录 新闻一:央行发布首个买断式逆回购交易公告 新闻二:2024CCF科技创业大赛报名截止 新闻三:BNB Chain将在迪拜主办第四届BNB孵化联盟(BIA) 认知决定你的赚钱能力。以下是今天可能影响你求职和创业的热点新闻: 今日关键字:TCL两连扳,已经跑了,我的认知就到此了 新…...

后端:Spring-1

文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目&#xff0c;导入依…...

OTX系统架构分析

OTX&#xff08;Open Test Sequence Exchange&#xff09;系统架构是一种专门为汽车行业设计的测试序列交换格式&#xff0c;它基于ISO 13209标准&#xff0c;旨在提供一种独立于测试人员的可执行测试序列描述格式。 一、OTX系统架构概述 OTX架构是一种标准化的平台和格式&am…...

ASO如何低预算进行优化

当一个产品打造出来之后&#xff0c;正式上线是从零到一的过程&#xff0c;那从一到一百的路径就是获取流量到商业变现这个环节产生的&#xff0c;之前的文章也说过&#xff0c;一个产品只有有了一定的曝光才能获得相应的搜索流量或下载流量 ASO的江湖地位&#xff1a;有数据显…...

非线性数据结构之数

一、基本概念 1. 二叉树的节点与深度 节点&#xff1a;二叉树的基本组成单位&#xff0c;每个节点包含一个数据值、一个左子节点和一个右子节点。树的深度&#xff08;Height&#xff09;&#xff1a;指树的根节点到叶子节点的最长路径所包含的边数。 2. 二叉树的类型 叶节…...

个人开发三步走

一、开发准备 1&#xff0e;需求分析&#xff1a;需求是开发的起点。第一步要做的就是明确需求&#xff0c;具体来说就是分析目标用户、他们的需求(功能需求、性能需求、安全需求)和痛点。 2&#xff0e;技术选型&#xff1a;综合开发需求、个人能力&#xff08;能熟练使用&a…...

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类&#xff0c;用于表示用户界面中的一个动作&#xff08;action&#xff09;。这些动作可以绑定到菜单项、工具栏按钮或快捷键上&#xff0c;提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…...

建立maven项目常见问题解决办法

从git拉的项目爆红 https://blog.csdn.net/wsdbld_/article/details/115380325 idea点击具体的类没有反应 https://www.likecs.com/show-204943934.html maven Could not find artifact com.** 无法下载原因分析 https://www.cnblogs.com/thinkingandworkinghard/p/100824…...

Windows 10 安装使用Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…...

微服务之间的调用关系

从数据的流向来区分有 1.直接调用&#xff08;推&#xff09;A直接B的接口直接将数据推送给B; 2.间接调用&#xff08;拉&#xff09;A先调B&#xff0c;B根据A给信息再去调A拉取数据&#xff1b; 感觉间接调用有点多此一举&#xff01;&#xff01;&#xff01; 直接调用的…...

Chinese Spelling Correction as Rephrasing Language Model(AAAI2024)

Chinese Spelling Correction as Rephrasing Language Model(AAAI2024) 一&#xff0e;概述 目前最先进的方法将CSC(Chinese Spelling Correction)作为序列标注任务&#xff0c;并在句子对上微调基于bert的方法。然而&#xff0c;我们注意到在将一个字符标注为另一个字符的过…...

DirectShow过滤器开发-写MP3音频文件过滤器(再写 写MP3)

下载本过滤器DLL 本过滤器将MP3音频流写到MP3音频文件。 过滤器信息 过滤器名称&#xff1a;写MP3_2 过滤器GUID&#xff1a;{AE46BC15-71E5-471C-8540-3B73094111EC} DLL注册函数名&#xff1a;DllRegisterServer 删除注册函数名&#xff1a;DllUnregisterServer 过滤器有1个…...

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于对等架构的虚拟电厂-配电网双层电碳协同调度模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...

G-Helper:华硕笔记本用户的终极轻量级硬件控制方案

G-Helper&#xff1a;华硕笔记本用户的终极轻量级硬件控制方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…...

AI职业成长地图:软件测试从业者的精准发展路径

在AI技术重塑软件工程生态的当下&#xff0c;软件测试行业正经历从自动化到智能化的范式跃迁。2026年全球AI测试市场规模突破12亿美元&#xff0c;传统测试岗位需求年复合增长率不足2%&#xff0c;而AI测试工程师岗位增幅达45%。对于软件测试从业者而言&#xff0c;构建清晰的A…...

STC15单片机定时器T0配置详解:从1T/12T模式选择到1秒精准定时(附完整代码)

STC15单片机定时器T0配置实战&#xff1a;1秒精准定制的全流程解析 从理论到实践的定时器T0深度探索 在嵌入式系统开发中&#xff0c;定时器功能如同系统的心跳&#xff0c;为各类任务提供精准的时间基准。STC15系列单片机凭借其高性能和丰富的外设资源&#xff0c;成为许多开…...

C语言入门实战:从开发环境搭建到核心语法精讲

1. 从零开始&#xff1a;为什么是C语言&#xff0c;以及我们该如何开始如果你对编程世界充满好奇&#xff0c;或者想从最坚实的地基开始构建你的技术大厦&#xff0c;那么选择C语言作为起点&#xff0c;绝对是一个明智且充满挑战的决定。这不是一个轻松的选择&#xff0c;但它的…...

32位寄存器全解析:逆向分析与系统底层开发的基石

1. 从零开始&#xff1a;为什么32位寄存器是逆向分析的基石如果你刚开始接触逆向工程或者系统底层开发&#xff0c;面对一堆以E开头的寄存器缩写&#xff0c;是不是感觉有点头大&#xff1f;EAX、EBP、ESP……这些看起来神秘的代号&#xff0c;其实是理解程序如何“思考”和“行…...

T507-H平台Linux实时化实战:RT-Preempt补丁移植与性能调优

1. 项目概述与背景最近在做一个车载信息娱乐系统的预研项目&#xff0c;客户对系统的响应延迟有硬性指标要求&#xff0c;这就逼得我们必须对底层Linux内核的实时性做深度优化。选型阶段&#xff0c;我们盯上了全志的T507-H平台&#xff0c;这是一颗面向汽车电子的四核A53处理器…...

Node.js 服务端应用接入 Taotoken 实现异步对话补全的完整步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Node.js 服务端应用接入 Taotoken 实现异步对话补全的完整步骤 在 Node.js 服务端应用中集成大模型能力&#xff0c;通常需要处理密…...

用STM32F103和继电器DIY智能家居:低成本改造台灯/风扇的保姆级教程

用STM32F103和继电器DIY智能家居&#xff1a;低成本改造台灯/风扇的保姆级教程 智能家居的概念早已不再遥不可及&#xff0c;借助STM32F103这样的低成本微控制器和简单的继电器模块&#xff0c;任何人都能将普通家电升级为智能设备。本文将手把手教你如何将一个普通台灯或风扇改…...

从Vue源码的preinstall钩子看团队包管理器规范:npx only-allow pnpm的工程实践

1. 为什么需要统一包管理器 最近在查看Vue源码时&#xff0c;发现package.json里有个有趣的配置&#xff1a;"preinstall": "npx only-allow pnpm"。这行看似简单的命令&#xff0c;背后隐藏着团队协作中一个非常重要的问题——包管理器的统一性。 想象一下…...

本地大模型部署的Python“翻译官“:llama-cpp-python深度解析

本地大模型部署的Python"翻译官"&#xff1a;llama-cpp-python深度解析 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 你是否曾为云端API的延迟而焦虑&#xff1f;是否担心…...