• 题目描述:
    给你一个字符串 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. 简化路径相关推荐

  1. 一个算法笨蛋的12月leetCode刷题日记

    类似文章 一个算法笨蛋的2021年11月leetCode刷题日记 一个算法笨蛋的2021年12月leetCode刷题日记 一个算法笨蛋的2022年1月leetCode刷题日记 一个算法笨蛋的2022年 ...

  2. Leetcode刷题日记(十二)

    又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...

  3. Leetcode刷题日记:21-25题篇

    Leetcode刷题日记:21-25题篇 简介 题目: 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表中的节点 25. K 个一组翻转链表 注 简介 这个系 ...

  4. LeetCode 70爬楼梯71简化路径72编辑距离(dp)

    新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注这个潇洒青年一起飞,回 ...

  5. 【LeetCode刷题日记】常用算法基础和理解及运用

    在我们LeetCode刷题过程中,如果我们只是了解数据结构(数组,链表,数)的使用方法,那我们在面对复杂的题目时,是很难很好的解决问题的,因此我们要了解一些常用算法来帮助我们更好的解题. 递归和迭代 ...

  6. leetcode刷题日记(一)—— 数组

    因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备. 剑指offer ...

  7. 石器时代 —— Leetcode刷题日记 (一 百大热题)

    Date: 2019.10.22 - (C++ Version) 文章目录 All Labels: `热题100` L1 两数之和 L2 两数相加 暴力相加 递归 迭代 L3 无重复字符的最长子串 L ...

  8. [东哥的leetcode刷题日记] leetcode 278 :First Bad Version

    leetcode 278 :First Bad Version 题目链接: https://leetcode-cn.com/problems/search-insert-position/ 难度: 简 ...

  9. C#LeetCode刷题之#63-不同路径 II​​​​​​​(Unique Paths II)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3682 访问. 一个机器人位于一个 m x ...

  10. C#LeetCode刷题之#62-不同路径(Unique Paths)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3680 访问. 一个机器人位于一个 m x ...

最新文章

  1. Android7.0反射类找不到的问题
  2. [Redux/Mobx] Redux由哪些组件构成?
  3. ubuntu防火墙操作
  4. android备忘录_苹果备忘录怎样把内容置顶?有置顶功能的备忘录便签
  5. Netty工作笔记0032---零拷贝AIO内容梳理
  6. A股开盘:深证区块链50指数涨0.51%,中远海科、广州浪奇涨停
  7. input accept属性控制选择文件类型
  8. Android 四大组件学习之Service三
  9. python scipy.signal 包络_python scipy signal.freqz用法及代码示例
  10. 分布式数据库cobar
  11. ico生成工具ico制作工具ico在线制作
  12. [注]打动我的50句广告语
  13. javaScript常用案例
  14. 点击率 ctr 与转化率 cvr
  15. 题解 DTOJ #1071. 国王小C kingdom
  16. 网络——奈奎斯特定理和香农定理
  17. java中的锁池和等待池是什么_线程的几个状态及方法,等待池和锁池的理解
  18. 零基础边缘端智慧交通训练营 | Lesson 4
  19. 如何优雅地提取 App 的素材
  20. 手机上的浏览器有几种内核

热门文章

  1. 自定义简单控件之标题控件
  2. jenkins忘记密码和常用插件的下载
  3. html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
  4. js排序的时间复杂度_js 排序算法之快速排序
  5. oracle的表连接-内外连接
  6. java常用快捷键 智能提示 及快捷键冲突
  7. redis数据结构-hash
  8. pip mysql_config not found_pip安装mysql-python出现mysql_config not found错误
  9. tomcat是什么_为什么开发者放弃了Tomcat,选择了Undertow?
  10. jdbc mysql 偶发空指针_JDBC连接执行MySQL存储过程报空指针或权限错误