小白水平理解面试经典题目LeetCode 71. Simplify Path【Stack类】

2024-02-08 07:28

本文主要是介绍小白水平理解面试经典题目LeetCode 71. Simplify Path【Stack类】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

71. 简化路径

小白渣翻译

给定一个字符串 path ,它是 Unix 风格文件系统中文件或目录的绝对路径(以斜杠 ‘/’ 开头),将其转换为简化的规范路径。

在 Unix 风格的文件系统中,句点 ‘.’ 指的是当前目录,双句点 ‘…’ 指的是上一级目录,任何多个连续的斜杠(即 ‘//’ )被视为单斜线 ‘/’ 。对于此问题,任何其他格式的句点(例如 ‘…’ )都被视为文件/目录名称。

规范路径应具有以下格式:

  • 该路径以单斜杠 ‘/’ 开头。

  • 任何两个目录都用单斜杠 ‘/’ 分隔。

  • 该路径不以 ‘/’ 结尾。

  • 路径仅包含从根目录到目标文件或目录的路径上的目录(即没有句点 ‘.’ 或双句点 ‘…’ )

返回简化的规范路径。

例子

在这里插入图片描述

小白理解过程

这时候黑长直女神过来问:小白,你这题怎么思考的啊?感觉这题虽然是string类型,但是Unix路径格式看起来很繁琐,特殊情况也都很多?

小白内心镇定:小美,《年会不能停》有机会一起去看看吧?
在这里插入图片描述
哦,不是的!其实这样的话你理解起来就简单多了
“ .” ==> 继续;
" . . " ==> 删除之前的目录;
" // " ==> 改为“/”

case 1:
Input: “/home/user/Documents/…/图片”
Output: “/home/user/图片”

case 2:
Input: “/…/home/user/文件”
Output: “/home/user/文件”

case 3:
Input: “/home/user/./Downloads/…/图片/././”
Output: “/home/user/图片”

白月光:哦,小白这样是清晰了不少!不过我还是希望能了解更多解题思路

小白:小美,那我再进一步给你讲哦,但是这题也有可能有“…”三个点的情况,这种咱们要返回当前目录/文件名字。

举个例子吧,如果给定你一个a/b/c/./…/…/d/

step1. 是 a 目录 + b目录

step2. 是a+b+c目录

step3(关键步骤):因为之后我们遇到了"…"那么,我们需要将c目录删除,这里也是我们为什么选择Stack数据结构的关键点。因为之前我们加入了c目录,而现在我们需要将它给删除哦。Stack.pop()可以用来弹出。

小美:小伙子,可以啊,这不仅对数据结构有所了解,罗杰也感人啊!不过电影票要你买单哦。

小白:嘿嘿,这是默认去看电影了啊在这里插入图片描述

面试环节

面试官:你可以解答这道”简化路径“的题目吗,来看看小伙子你对复杂情况的理解。

小白:嘿嘿,这不巧了么这不是。
在这里插入图片描述

    public String simplifyPath(String path) {Deque<String> dirOrFiles = new ArrayDeque<>();for (String dirOrFile : path.split("/")) {// 如果文件不为空,并且文件中有'..'字符,那么文件夹就删除if (!dirOrFiles.isEmpty() && dirOrFile.equals("..")) {dirOrFiles.removeLast();// 如果文件不是'.' 也不是空字符,同时也不是'..',那么我们要将这个最后的} else if (!dirOrFile.equals(".") && !dirOrFile.equals("") && !dirOrFile.equals("..")) {// 添加这个元素到队尾dirOrFiles.addLast(dirOrFile);}}// 创建简化后的pathStringBuilder simplified_path = new StringBuilder();// 遍历dirOrFiles并且用/分割for (String dirOrFile : dirOrFiles) {simplified_path.append("/").append(dirOrFile);}return simplified_path.length() == 0 ? "/" : simplified_path.toString();}

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:矮油,不错啊,我就是试试你,下边还有一道题接着来。

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。不是,这面试官好体力啊!
在这里插入图片描述

============================================================================
🍀🍀🍀🍀🍀🍀更多算法题解请看 面试数据结构与算法总结分类+leetcode目录【基础版】
编码道路漫漫,只要先看脚下的路,徐徐前进即可。

这篇关于小白水平理解面试经典题目LeetCode 71. Simplify Path【Stack类】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690306

相关文章

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分