LeetCode题练习与总结:简化路径--71

一、题目描述

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

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

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

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

示例 1:

输入:path = "/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。 

示例 2:

输入:path = "/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。

示例 3:

输入:path = "/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例 4:

输入:path = "/a/./b/../../c/"
输出:"/c"

提示:

  • 1 <= path.length <= 3000
  • path 由英文字母,数字,'.''/''_' 组成。
  • path 是一个有效的 Unix 风格绝对路径。

二、解题思路

1. 首先,我们可以将给定的路径字符串按’/'进行分割,得到一个字符串数组。

2. 然后,我们可以遍历这个数组,根据规则进行处理:

  • 如果是".",则表示当前目录,我们可以忽略。
  • 如果是"…",则表示上一级目录,我们需要将当前的目录弹出。
  • 如果是空字符串,则表示连续的’/',我们也可以忽略。
  • 否则,我们就将当前的目录压入栈中。

3. 最后,我们将栈中的元素拼接成路径字符串,注意,如果栈为空,我们需要返回"/"。

三、具体代码

import java.util.Stack;public class Solution {public String simplifyPath(String path) {String[] parts = path.split("/");Stack<String> stack = new Stack<>();for (String part : parts) {if (part.equals(".") || part.isEmpty()) {continue;}if (part.equals("..")) {if (!stack.isEmpty()) {stack.pop();}} else {stack.push(part);}}StringBuilder sb = new StringBuilder();for (String part : stack) {sb.append("/").append(part);}return sb.length() == 0 ? "/" : sb.toString();}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 分割路径字符串 path.split("/") 的时间复杂度是 O(n),其中 n 是路径字符串的长度。
  • 遍历分割后的字符串数组 parts 的时间复杂度是 O(m),其中 m 是数组的长度。在最坏的情况下,m 可以接近 n(当路径中没有 ‘/’ 时)。
  • 构建最终路径字符串的时间复杂度是 O(k),其中 k 是栈中元素的数量。在最坏的情况下,k 可以接近 n(当路径中没有 ‘.’ 或 ‘…’ 时)。
  • 综上所述,总的时间复杂度是 O(n + m + k),在最坏的情况下,可以近似为 O(n)。
2. 空间复杂度
  • 分割后的字符串数组 parts 占用 O(m) 的空间,其中 m 是数组的长度。
  • 栈 stack 占用 O(k) 的空间,其中 k 是栈中元素的数量。
  • StringBuilder 占用 O(k) 的空间。
  • 综上所述,总的空间复杂度是 O(m + k),在最坏的情况下,可以近似为 O(n)。

五、总结知识点

1. 字符串处理

  • 使用 split 方法根据给定的分隔符(在这里是 ‘/’)将字符串分割成数组。
  • 使用 equals 方法比较字符串是否相等。

2. 数据结构

  • 使用 Stack 类来实现一个后进先出(LIFO)的数据结构,用于处理目录的进入和退出。

3. 循环和条件判断

  • 使用 for 循环遍历字符串数组。
  • 使用 if 和 else 条件判断来执行不同的逻辑,如忽略当前目录(“.”),返回上一级目录(“…”),或者将目录加入栈中。

4. 字符串构建

  • 使用 StringBuilder 类来高效地构建最终的路径字符串,因为它允许在不创建新对象的情况下修改字符串内容。

5. 异常处理

  • 在处理 “…” 时,使用 if (!stack.isEmpty()) 来检查栈是否为空,以避免 EmptyStackException

6. 边界条件处理

  • 在返回最终路径时,检查 StringBuilder 的长度是否为0,如果是,则返回根路径 “/”。

7. Java 语法

  • 使用 public class 定义一个公共类。
  • 使用 public static 定义一个公共静态方法。
  • 使用 return 语句返回方法的结果。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RIP小实验配置及缺省路由下发

配置如下&#xff1a; IP配置&#xff1a; IP配置完先查看RIP协议学习到的路由表&#xff0c;没有内容则代表没有开启RIP 启用RIP&#xff1a;这里的rip后跟的ID只具有本地意义&#xff0c;可以在1-65535之间随便取&#xff0c;不同路由器之间都可以取用不同的&#xff0c;为了…

上网行为管理系统功能介绍_上网行为管理实现的功能

上网行为管理系统是一种集成了网络监控、行为分析、策略管理和安全控制等功能的综合性软件解决方案。 它通过对企业内部网络的全面监控和深度分析&#xff0c;帮助管理者了解员工的网络使用习惯、识别潜在风险、优化网络资源配置&#xff0c;并最终实现网络安全和效率的双重提…

hyperf统一请求响应

2024年4月18日08:48:45 以下是两个方案&#xff1a; 1&#xff0c;使用注解&#xff0c;直接返回 <?phpnamespace App\Utils;use App\Utils\GlobalCode; use App\Utils\GlobalMsg; use Hyperf\Contract\ContainerInterface; use Hyperf\Di\Annotation\Inject; use Hyper…

对接浦发银行支付(三)-- QR扫码付

一、使用场景 扫码付&#xff0c;指的是支付平台&#xff0c;给每个用户的具体订单生成一个QR二维码&#xff0c;用户本人或者他人扫码付款。 付款用户可以直接识别二维码&#xff0c;或者下载到本地&#xff0c;通过微信或支付宝扫一扫识别&#xff0c;第二步将跳转至对应的支…

php 笔记 01

01 常见的一些交互概念 什么是交互: 就是前端页面从服务器后台请求数据来渲染 前端页面把获取到的数据发送给后台 服务器: 谁提供数据 谁就是服务器 后台程序(php) 客户端: 谁请求数据 谁就是客户端 前端页面(html页面) 一个网址的访问包括的内容: 协议: 规定了交互双方遵循的…

详细分析Java中的AuthRequest类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 公共接口&#xff0c;定义了对第三方平台进行授权、登录、撤销授权和刷新 token 的操作 1. 基本知识 先看源码基本API接口&#xff1a; import me.zhyd.oauth.enums.AuthResponseStatus; import me.zhyd.oauth.exception.AuthExce…

SSDReporter for Mac:全面检测SSD健康,预防数据丢失,让您的Mac运行更稳定

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘&#xff08;SSD&#xff09;健康状况检测工具&#xff0c;旨在帮助用户全面了解并监控其Mac设备中SSD的工作状态&#xff0c;从而确保数据的完整性和设备的稳定性。 这款软件具有多种强大的功能。首先&#xff0c;它能够定…

09-ARM开发板的HelloWorld

在ARM开发板上运行x86_64平台程序 前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序&#xff0c;通过NFS服务器&#xff0c;尝试在开发板上直接运行。 如图所示&#xff0c;程序无法正常运行&#xff0c;终端提示ARM开发板在执行x86架构&#xff08;Intel或AMD&#xff…

笔记:Python猴子吃桃

文章目录 前言一、分析题目二、编写代码1.代码2.优化代码 总结 前言 笔记&#xff1a;猴子吃桃:猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;不过瘾就多吃了一个&#xff0c; 第二天又将剩下的桃子吃了一半&#xff0c;不过瘾又多吃了一个&#xff0c;以后每…

c++使用googletest进行单元测试

googletest进行单元测试 使用Google test进行测试一、单元测试二、使用gmock测试 使用Google test进行测试 使用场景&#xff1a; 在平时写代码中&#xff0c;我们需要测试某个函数是否正确时可以使用Google test使用&#xff0c;当然&#xff0c;我们也可以自己写函数进行验证…

SpringMVC中,/和/*和/**分别表示什么

根路径 "/" 用途 / 是最基本的路径映射&#xff0c;在Spring MVC中它表示应用程序的根路径。当你在浏览器中访问 http://domain.com/ 时&#xff0c;就会匹配到根路径。 特点 这种映射方式主要用于默认的欢迎页或者一些针对根路径的特定处理。例如&#xff0c;你可能…

Docker 停止及删除容器和镜像(单个和所有)

Docker 停止及删除容器和镜像&#xff08;单个和所有&#xff09; 文章目录 Docker 停止及删除容器和镜像&#xff08;单个和所有&#xff09;1. docker其它相关命令2. 停止及删除容器和镜像&#xff08;单个和所有&#xff09;2.1. 停止及删除单个容器2.2. 停止及删除所有容器…

Python数字三角形

在数学中&#xff0c;数字三角形通常指的是由数字组成的三角形结构&#xff0c;其中每个数字是其正上方数字之和。一个经典的例子是帕斯卡三角形&#xff08;Pascals Triangle&#xff09;&#xff0c;它与组合数学中的二项式系数紧密相关。 在Python中&#xff0c;我们可以通…

旅游陪同翻译难吗, 旅游翻译英译中哪家好?

近来&#xff0c;随着中国旅游业的蓬勃发展&#xff0c;旅游陪同翻译的需求也水涨船高&#xff0c;这些专业的翻译服务者为中外游客搭建起友谊的桥梁&#xff0c;引领他们共同探索中国这片古老而神秘的土地 。那么&#xff0c;旅游陪同翻译英译中难吗&#xff1f;我们如何在众多…

混合A*算法

混合A算法是一种路径规划算法,它结合了A搜索和采样优化技术。其原理可以简要概括如下: A*搜索:A*算法是一种启发式搜索算法,用于解决图或者网络中的路径规划问题。它通过维护两个列表(开放列表和封闭列表),根据启发式函数(估计函数)和已走过路径的成本来选择下一个状态…

mysql数据库连接工具(mysql数据库连接工具怎么备份数据不备份表结构)

MySQLWorkbench连接,导入和导出数据库? 1、导出&#xff1a;使用MySQL Workbench连接到MySQL服务器&#xff0c;选择要导出的数据库&#xff0c;右键单击数据库并选择“导出”。选择要导出的表和数据&#xff0c;将导出文件保存为.sql文件。 2、打开MySQL Workbench&#xf…

OpenHarmony 视图缩放组件—subsampling-scale-image-view

简介 深度缩放视图&#xff0c;图像显示&#xff0c;手势平移缩放双击等 效果图&#xff08;旋转、缩放、平移&#xff09; 下载安装 ohpm install ohos/subsampling-scale-image-view OpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何安装 OpenHarmony ohpm 包 使…

20240419金融读报:加大绿色债券支持绿色金融货币政策仍有空间人民银行对金融服务实体理解摘抄

1、国家发文支持通过发行绿色债券、绿色资产支持正确等支持绿色金融。但2023年绿色债券发行规模占比1.17%。&#xff08;是不是可以买一支&#xff0c;乘风起&#xff1f;&#xff09; 2、4月18日&#xff0c;国新办举行新闻发布会&#xff0c;表明货币政策还有空间&#xff0c…

简单了解Vue3

1. Vue 3相对于Vue 2有哪些主要的改进&#xff1f; 答案&#xff1a; Vue 3相对于Vue 2的主要改进包括&#xff1a; Composition API&#xff1a;提供更灵活、可重用的代码组织方式。更好的TypeScript支持&#xff1a;减少类型错误&#xff0c;提高代码质量。性能优化&#x…

昂科烧录器支持Nuvoton新唐科技的低功耗微控制器M482SIDAE

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Nuvoton新唐科技的低功耗微控制器M482SIDAE已经被昂科的通用烧录平台AP8000所支持。 M482SIDAE以Arm Cortex-M4F为核心&#xff0c;是带有DSP指令集的高效能低功耗微控制器。其…