leetcode刷题日记-71. 简化路径
题目描述:
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
1.始终以斜杠 ‘/’ 开头。
2.两个目录名之间必须只有一个斜杠 ‘/’ 。
3.最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
4.此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 ‘.’ 或 ‘…’)。返回简化后得到的 规范路径 。
示例:
输入:path = “/home/”
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。输入:path = “/…/”
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。输入:path = “/home//foo/”
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。输入:path = “/a/./b/…/…/c/”
输出:"/c"提示:
1 <= path.length <= 3000
path 由英文字母,数字,’.’,’/’ 或 ‘_’ 组成。
path 是一个有效的 Unix 风格绝对路径。解析:连续好久没有刷到中等难度的题目了。这个题目在中等难度题目里面难度应该是较低的,关键在于有没有理清题意,题目巴拉巴拉说那么多,其实就是让我们挑出有效目录名,然后只用一个"/“给连接起来。但是这个题目有一点要考虑到,就是”…",这个也是这道题目为什么是难度是中等的原因,"…“指的是将目录切换到上一级,也就是”/a/./b/…"="/a",换句话说,如果我们得到了有效的目录名[“a”, “b”],如果遇到了"…",那么"b"就没有用了,那么我们的思路就出来了,那就是栈,一个一个往栈里面加有效目录名,遇到"…“就抛出栈顶的元素。”."因为指的是当前目录,对输出结果没有影响,因此不考虑。到这里,思路理清了,代码就简单了,如下所示。
class Solution:def simplifyPath(self, path: str) -> str:"""给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径>>>self.simplifyPath("/a/./b/../../c/")>>>"/c""""folderNames = path.split('/')stackNames = []for name in folderNames:if name == '..':if stackNames:stackNames.pop()elif name and name != '.':stackNames.append(name)return '/' + '/'.join(stackNames)
leetcode刷题日记-71. 简化路径相关推荐
- 一个算法笨蛋的12月leetCode刷题日记
类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...
- Leetcode刷题日记(十二)
又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...
- Leetcode刷题日记:21-25题篇
Leetcode刷题日记:21-25题篇 简介 题目: 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表中的节点 25. K 个一组翻转链表 注 简介 这个系 ...
- LeetCode 70爬楼梯71简化路径72编辑距离(dp)
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...
- 【LeetCode刷题日记】常用算法基础和理解及运用
在我们LeetCode刷题过程中,如果我们只是了解数据结构(数组,链表,数)的使用方法,那我们在面对复杂的题目时,是很难很好的解决问题的,因此我们要了解一些常用算法来帮助我们更好的解题. 递归和迭代 ...
- leetcode刷题日记(一)—— 数组
因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备. 剑指offer ...
- 石器时代 —— Leetcode刷题日记 (一 百大热题)
Date: 2019.10.22 - (C++ Version) 文章目录 All Labels: `热题100` L1 两数之和 L2 两数相加 暴力相加 递归 迭代 L3 无重复字符的最长子串 L ...
- [东哥的leetcode刷题日记] leetcode 278 :First Bad Version
leetcode 278 :First Bad Version 题目链接: https://leetcode-cn.com/problems/search-insert-position/ 难度: 简 ...
- C#LeetCode刷题之#63-不同路径 II(Unique Paths II)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3682 访问. 一个机器人位于一个 m x ...
- C#LeetCode刷题之#62-不同路径(Unique Paths)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3680 访问. 一个机器人位于一个 m x ...
最新文章
- Android7.0反射类找不到的问题
- [Redux/Mobx] Redux由哪些组件构成?
- ubuntu防火墙操作
- android备忘录_苹果备忘录怎样把内容置顶?有置顶功能的备忘录便签
- Netty工作笔记0032---零拷贝AIO内容梳理
- A股开盘:深证区块链50指数涨0.51%,中远海科、广州浪奇涨停
- input accept属性控制选择文件类型
- Android 四大组件学习之Service三
- python scipy.signal 包络_python scipy signal.freqz用法及代码示例
- 分布式数据库cobar
- ico生成工具ico制作工具ico在线制作
- [注]打动我的50句广告语
- javaScript常用案例
- 点击率 ctr 与转化率 cvr
- 题解 DTOJ #1071. 国王小C kingdom
- 网络——奈奎斯特定理和香农定理
- java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解
- 零基础边缘端智慧交通训练营 | Lesson 4
- 如何优雅地提取 App 的素材
- 手机上的浏览器有几种内核
热门文章
- 自定义简单控件之标题控件
- jenkins忘记密码和常用插件的下载
- html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
- js排序的时间复杂度_js 排序算法之快速排序
- oracle的表连接-内外连接
- java常用快捷键 智能提示 及快捷键冲突
- redis数据结构-hash
- pip mysql_config not found_pip安装mysql-python出现mysql_config not found错误
- tomcat是什么_为什么开发者放弃了Tomcat,选择了Undertow?
- jdbc mysql 偶发空指针_JDBC连接执行MySQL存储过程报空指针或权限错误