📖本篇内容:leetcode每日一题71.简化路径 栈的简单应用
📆 最近更新:2022年1月5日 leetcode每日一题1576.替换所有的问号 字符串模拟这种简单题你还不会么
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
写在前面
今个睡不着,所以🙊本着不能荒度时间的缘由打开了力扣刷起了题,今天的题有什么奇怪么?但本着务实的态度,发现这个题的解法应该挺多的,不只是用栈,队列等…话不多说,来看看今天的题吧
题目
- 简化路径
给你一个字符串 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小付夜深人静时打卡了~
坚持打卡从我做起~
这道题不止这种做法 如果可以希望能试试其他的办法
最后
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~