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);
            }
        }
        // 创建简化后的path
        StringBuilder 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目录【基础版】
 编码道路漫漫,只要先看脚下的路,徐徐前进即可。





![[WinForm开源]概率计算器 - Genshin Impact(V1.0)](https://img-blog.csdnimg.cn/direct/4507c230df3e452a8e8029e22a08ef8a.png)













