以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径

请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/simplify-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
——————————————————————
个人理解题意:从前往后看文件的绝对路径,两个点(…)的作用是将目录切换到上一级,一个点(.)的作用是表示当前目录本身,因此可以在操作时将其忽略。

对于给定绝对文件路径,使用’/‘对其进行切分,因为绝对路径中可能存在’//‘这样的组合,使用’/‘切分后会产生’'这样的输出,同时因为/./的作用是表示当前目录本身,所以没有意义,在切分时也可以将其忽略;

对于两个点(…),如果其存在于根目录中,没有办法将目录切换到上一级,因此可以跳过;但是如果在遇到(…)的时候不是根目录,则需要将其当前目录进行删除。

其Python3代码如下:

class Solution:def simplifyPath(self, path: str) -> str:pl = [p for p in path.split('/') if p not in ['','.']]  # 忽略'//'和'/./'的情况,这两种切分后为''和'.'while '..' in pl:   # 找到列表中第一个'..'的位置idx = pl.index('..')if idx != 0:   # 表示当前目录不是根目录pl = pl[:idx-1] + pl[idx+1:]   # 将前目录进行删除else:  # 当前目录为根目录pl.remove('..')  # 直接删除'..',因为没有意义,根目录没办法返回更上一级的目录return '/' + '/'.join(pl)  # 拼接并返回规范化的绝对路径

时间复杂度为O(n),空间复杂度为O(n);

LeetCode —— 71.简化路径(Python3)相关推荐

  1. LeetCode 71. 简化路径(栈)

    1. 题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录 ...

  2. 2022-3-19 Leetcode 71. 简化路径

    第一版 class Solution {public:string simplifyPath(string path) {vector<string> mysk;string ret;in ...

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

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

  4. LeetCode+ 71 - 75

    简化路径 算法标签:栈.字符串 给我们一个路径,要求把文件路径化简,给定的路径一定是合法的 Linux 路径,一个合法的 Linux 路径一般从 / 开始,/ 表示根目录,有很多的子目录 home.y ...

  5. LeetCode 71~75

    前言 本文隶属于专栏<LeetCode 刷题汇总>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构请见LeetCode 刷题汇总 正文 幕布 幕 ...

  6. LeetCode/LintCode 题解丨一周爆刷字符串:简化路径

    描述 给定一个文件的绝对路径(Unix-style),请进行路径简化. Unix中, . 表示当前目录, - 表示父目录. 结果必须以 / 开头,并且两个目录名之间有且只有一个 /.最后一个目录名(如 ...

  7. LeetCode 71. Simplify Path

    LeetCode 71. Simplify Path 本博客转载自:https://blog.csdn.net/makuiyu/article/details/44497901 Solution1:没 ...

  8. leetcode 64. 最小路径和(递归 / 动态规划解法图解)(Java版)

    题目 leetcode 64. 最小路径和 提示: m == grid.length n == grid[i].length 1 <= m, n <= 200 0 <= grid[i ...

  9. LeetCode.M62.不同路径

    LeetCode.M62.不同路径 题目: 题目大意: ​ 给定一个 m * n 的方格,从 (0, 0) 走到 (m - 1, n - 1).规定只能**向下.向右 ** 数据范围: 1 <= ...

最新文章

  1. c++自底向上算符优先分析_词法分析程序的自动生成器(二)——Thompson算法
  2. iOS最好用的引导页
  3. html语义化面试题,前端面试题-HTML结构语义化
  4. PHP面试题:使用PHP描述快速排序算法,对象可以是一个数组?
  5. [转]写一个块设备驱动(第八章)
  6. dev 报表设计器 怎么设置每页10行_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
  7. python--json pickle 模块
  8. PC串口DB9接口 示意图 (备忘)
  9. juniper CLI 基本操作
  10. python网络爬虫系列教程——python中pyquery库应用全解
  11. 辐流式重力浓缩池计算_污泥浓缩池工作方式
  12. vs2019 + vcpkg安装OpenSSL
  13. Elasticsearch节点类型
  14. 软件测试报告模板怎么写,这篇文章告诉你
  15. NodeJS博客实战26_源码与总结
  16. 高级Java开发人员最常访问的几个网站
  17. tomcat配置优化,apr的配置详解
  18. IE中对于本地地址不使用代理服务器的选项
  19. dp题目总结(1)——基础
  20. Easyui DataGrid Editor

热门文章

  1. 查找一个类的好方法,可节省做很多层的传递
  2. 略论bs架构设计的几种模式
  3. 2021年Github项目Top100
  4. TypeScript Symbol
  5. TCP UDP的区别
  6. 【问题记录】 Linux分区磁盘占满,导致ssh登陆闪退
  7. 【树莓派】给树莓派安装中文输入法Fcitx及Google拼音输入法
  8. mac忘记MySQL初始密码
  9. 代码抽象_如何通过抽象使代码更具可读性
  10. 用于查看编程代码的软件_当您创建用于学习编程的软件时,最重要的用户是您