leetcode每日一题71.简化路径 栈的简单应用 如果是你 你还会用什么方法

📖本篇内容:leetcode每日一题71.简化路径 栈的简单应用

📆 最近更新:2022年1月5日 leetcode每日一题1576.替换所有的问号 字符串模拟这种简单题你还不会么

🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起

写在前面

今个睡不着,所以🙊本着不能荒度时间的缘由打开了力扣刷起了题,今天的题有什么奇怪么?但本着务实的态度,发现这个题的解法应该挺多的,不只是用栈,队列等…话不多说,来看看今天的题吧

题目

  1. 简化路径

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 ‘/’ 开头。
两个目录名之间必须只有一个斜杠 ‘/’ 。
最后一个目录名(如果存在)不能 以 ‘/’ 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 ‘.’ 或 ‘…’)。
返回简化后得到的 规范路径 。

示例

示例1:

输入:path = "/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。 

示例2:

输入:path = "/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根目录是你可以到达的最高级。

示例3:

输入:path = "/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例4:

输入:path = "/a/./b/../../c/"
输出:"/c"

提示

1 <= path.length <= 3000
path 由英文字母,数字,'.','/' 或 '_' 组成。
path 是一个有效的 Unix 风格绝对路径。

思路

这道题是给了我们一个字符串来表示Unix风格的绝对路径

我们需要将其简化:

我们可以先将其数据按照 / 进行切割得到每个 小路径地址

然后 对不同的小路径 进行对应的操作

学过Linux的同学都知道上述示例中的简化标准所以我们可以分类进行讨论

代码实现

class Solution {
    public String simplifyPath(String path) {
    	//用于存放每个`合法`小路径的数据栈
        Stack<String>stack = new Stack<>();
        //对整体路径进行切割 得到每个小路径
        String[] splitPath = path.split("/");
		//遍历小路径 进行分类讨论
        for (String sP : splitPath){
        	//如果当前这个小路径为 `.`则代表访问的还是当前文件 继续
            if (sP.isEmpty() || sP.equals("."))continue;
            //如果访问到的小路径为 `..`就需要进行判断当前合理数据栈中是否存有合法小路径
            if (sP.equals("..")){
            	//如果存在合法小路径就弹出到上一个目录
                if (!stack.isEmpty())stack.pop();
            }else {
            	//反之将小路径加入到栈中
                stack.push(sP);
            }
        }
        //String.join()方法是将stack中的数据按照"/"作为分隔符依次将合法小路径添加
        return "/" + String.join("/",stack);
    }
}

执行结果

在这里插入图片描述

写在最后

2022-01-06小付夜深人静时打卡了~

坚持打卡从我做起~

这道题不止这种做法 如果可以希望能试试其他的办法

最后

每天进步点 每天收获点

愿诸君 事业有成 学有所获

如果觉得不错 别忘啦一键三连哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alascanfu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值