1. 题目

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

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

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

示例 1:
输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。示例 2:
输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。示例 3:
输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。示例 4:
输入:"/a/./b/../../c/"
输出:"/c"示例 5:
输入:"/a/../../b/../c//.//"
输出:"/c"示例 6:
输入:"/a//bc/d//././/.."
输出:"/a/b/c"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/simplify-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 栈解题

  • 需要考虑四种情况 /,.,..,其他
  • 用栈来记录路径,遇到..弹栈,遇到其他压栈
class Solution {public:string simplifyPath(string path) {stack<string> stk;string file;path += '/';   //便于处理最后一次边界for(int i = 0; i < path.size(); ++i){if(path[i] == '/')   //遇到分隔符,需要处理{if(file == ".."){if(!stk.empty())stk.pop();}else if(file != "" && file != ".")stk.push(file);file = "";    //处理完,清空}else// != '/'{file += path[i];}}string ans;while(!stk.empty()){ans = '/'+stk.top()+ans;stk.pop();}if(ans == "")return "/";return ans;}
};

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

  1. LeetCode —— 71.简化路径(Python3)

    以 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. 疯狂python讲义
  2. Golang 并发concurrency
  3. php的Traits属性以及基本用法
  4. HDU 1241 Oil Deposits
  5. 使用ETL控件还是存储过程
  6. 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
  7. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)
  8. kubespray容器化部署kubernetes高可用集群
  9. VC++动态链接库(DLL)编程(三)――MFC规则DLL
  10. Linux定义多个标准输入输出,言简意赅解释Linux中的标准输入输出
  11. c语言迷宫源码,C语言迷宫源代码
  12. Fibonacci算法
  13. 命令dd 及简单应用
  14. 转载 The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)...
  15. 在HTML中 标记hn的作用,html标记_1.ppt
  16. 如何进入BIOS模式,BIOS进不去解决方案
  17. Openssl下载网址
  18. matlab极性电容叫什么,电解电容与无极性电容之间的区别是什么
  19. IOT物联网,如何上传正确的消息推送证书到第三方平台
  20. 高可用集群(HAC)

热门文章

  1. 当c语言老师遇到网络崩溃,网络教学搞不定?工科教授来支招!
  2. P1133 教主的花园 (动态规划)
  3. [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件
  4. Spring的核心机制依赖注入,Junit测试与Java基础Getter和Setter两种方法意义——2017.07.26...
  5. Swift学习笔记 闭包表达式
  6. 基于ArcEngine与C#的鹰眼地图实现
  7. scala学习-类与对象
  8. nyoj_66_分数拆分_201312012122
  9. U-Boot-2009-03移植笔记(移植准备)
  10. SubSonic中的字段付值--MakeOld Update