LeetCode-071-简化路径
简化路径
题目描述:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/simplify-path/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:利用栈
声明一个栈paths用来存出现过的目录,然后遍历path的字符,获取每一个/之间的字符串str,str有以下几种可能:
- 如果str是
.
,则不用处理;- 如果str是
..
,而且paths不为空,则paths抛弃栈顶元素即最外层目录;- 如果str不是以上两种情况,则说明str是一个目录,入栈。
最后,将paths倒序排列,然后拼成目录格式返回。
import java.util.Stack;
public class LeetCode_071 {
public static String simplifyPath(String path) {
Stack<String> paths = new Stack<>();
String str = "";
for (char c : path.toCharArray()) {
if (c == '/') {
if (str.length() != 0) {
if (str.equals(".")) {
} else if (str.equals("..")) {
if (!paths.isEmpty()) {
paths.pop();
}
} else {
paths.push(str);
}
str = "";
}
} else {
str += c;
}
}
if(str.length() != 0) {
if (str.equals(".")) {
} else if (str.equals("..")) {
if (!paths.isEmpty()) {
paths.pop();
}
} else {
paths.push(str);
}
}
if (paths.isEmpty()) {
return "/";
}
Stack<String> reversePaths = new Stack<>();
while (!paths.isEmpty()) {
reversePaths.push(paths.pop());
}
String result = "";
while (!reversePaths.isEmpty()) {
result += "/" + reversePaths.pop();
}
return result;
}
public static void main(String[] args) {
System.out.println(simplifyPath("/a//b////c/d//././/.."));
}
}
【每日寄语】 成功的道路是由目标铺成的,大目标比没目标有用,小目标比大目标有用,现在不玩命,将来命玩你。
分类:
LeetCode-个人题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了