当前位置: 首页 > news >正文

LeetCode第71题 - 简化路径

题目

以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。
请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。

解答

public String simplifyPath(String path) {if (path == null) {return "/";}path = path.trim();if (path.isEmpty()) {return "/";}Stack<String> stack = new Stack<>();String[] fields = path.split("/");for (String field : fields) {field = field.trim();if (field.isEmpty()) {continue;}switch (field) {case ".":break;case "..":if (!stack.isEmpty()) {stack.pop();}break;default:stack.push(field);break;}}StringBuilder sb = new StringBuilder();while (!stack.isEmpty()) {sb.insert(0, stack.pop()).insert(0, "/");}if (sb.length() == 0) {sb.append("/");}return sb.toString();
}

要点
本题比较简单,按照题目的要求,利用JDK提供的StackStringBuilder即可实现。
注意事项:

  • 异常输入,直接返回/
  • 去掉输入字符串前、后的空格。
  • 空字符串,直接返回/
  • 使用/来拆分输入的字符串。
  • 针对每一段进行处理。
    • .,不做处理。
    • ..,返回上一层。
    • 保留。
  • 拼接路径。

当前提供的实现,其实有点啰嗦,后续可以改进。
利用File类的方法也可以达成题目的要求,考虑到并没有利用算法的知识来解决问题,因此这里不做演示。

http://www.lryc.cn/news/273196.html

相关文章:

  • VSCode上远程调试代码出现的问题
  • 【langchain】入门初探实战笔记(Chain, Retrieve, Memory, Agent)
  • 《数据结构、算法与应用C++语言描述》- 平衡搜索树 -全网唯一完整详细实现插入和删除操作的模板类
  • 网络路由跟踪工具
  • 设计模式 七大原则
  • (1)(1.13) SiK无线电高级配置(一)
  • drf知识--10
  • 探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)
  • mysql死锁排查
  • 若依项目(ruoy-vue)多模块依赖情况简要分析
  • 【普中开发板】基于51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+设计报告+讲解视频)
  • 按照层次遍历结果打印完全二叉树
  • 基于SpringBoot的药店管理系统
  • Java 泛型深入解析
  • Apache Doris (六十): Doris - 物化视图
  • 【javaweb】tomcat9.0中的HttpServlet
  • 数据结构学习笔记——查找算法中的树形查找(B树、B+树)
  • python包chromadb安装失败总结
  • 机器学习(四) -- 模型评估(2)
  • 泊松分布与二项分布的可加性
  • 【PostgreSQL】约束-排他约束
  • Java重修第一天—学习数组
  • 【C#】知识点实践序列之Lock的锁定代码块
  • StringBad ditto (motto)
  • Redis缓存击穿、缓存雪崩、缓存穿透
  • 【PCB专题】Allegro封装更新焊盘
  • ES6之Reflect详解
  • 文件监控-IT安全管理软件
  • 达梦数据库安装超详细教程(小白篇)
  • 复试 || 就业day09(2024.01.04)算法篇