博客
关于我
71 简化路径(模拟、栈)
阅读量:355 次
发布时间:2019-03-04

本文共 1441 字,大约阅读时间需要 4 分钟。

用栈解决路径简化问题的方法

在处理文件路径时,Unix 系统中的点和双点(. 和 ..)具有特定的含义。点(.)表示当前目录,而双点(..)表示上一级目录。因此,我们需要将给定的路径简化为规范路径。

方法思路

为了简化路径,可以使用栈来模拟目录的层级。每当遇到双点(..)时,栈弹出一个元素,表示返回上一级目录。点(.)则表示当前目录,不需要处理。其他目录名则被压入栈。

具体步骤如下:

  • 将路径分割成各个部分,使用斜杠 / 作为分隔符。
  • 遍历每个部分:
    • 如果是双点(..),弹出栈顶元素。
    • 如果是点(.)或空字符串,忽略。
    • 其他情况,压入栈。
  • 最后,根据栈内容生成路径。
  • 解决代码

    import java.util.Stack;import java.util.Scanner;public class Solution {    public static String simplifyPath(String path) {        String[] parts = path.split("/");        Stack
    stack = new Stack<>(); for (String part : parts) { if (part.equals("..")) { if (!stack.isEmpty()) { stack.pop(); } } else if (!part.equals(".") && !part.equals(" ") && !part.equals("")) { stack.push(part); } } if (stack.isEmpty()) { return "/"; } StringBuilder result = new StringBuilder(); for (int i = 0; i < stack.size(); i++) { if (i != 0) { result.append('/'); } result.append(stack.get(i)); } return result.toString(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println(simplifyPath(scanner.nextLine())); }}

    代码解释

  • 分割路径:使用 split("/") 将路径分割成各个部分。
  • 栈初始化:创建一个栈来管理目录层级。
  • 遍历处理:每个部分检查是否为双点或点,分别处理。其他部分压入栈。
  • 生成路径:根据栈内容生成最终路径,处理斜杠的位置,确保路径正确无误。
  • 这种方法简洁高效,能够处理各种复杂路径情况,确保结果是规范且最短的路径。

    转载地址:http://rdgr.baihongyu.com/

    你可能感兴趣的文章
    三、案例:留言板 & url.parse()
    查看>>
    Python3中的map()函数!!!
    查看>>
    Python中的filter()函数!!!1
    查看>>
    LeetCode:1640. 能否连接形成数组!!!
    查看>>
    (新手小白必学!)用Python设计和实现聪明的尼姆游戏(人机对战)!!!!
    查看>>
    LeetCode:283. 移动零!!!1
    查看>>
    Python实验26:计算文件MD5值
    查看>>
    端口探测
    查看>>
    LeetCode:28. 实现 strStr()——————简单
    查看>>
    java 中 private default protected public 范围
    查看>>
    LeetCode:697. 数组的度————简单
    查看>>
    LeetCode:1052. 爱生气的书店老板————中等
    查看>>
    C语言的6大基本数据类型!(学习C语言小白必备!!)
    查看>>
    成为一个优秀数据工程师学习内容(1)
    查看>>
    红黑树学习
    查看>>
    Redis未授权访问漏洞
    查看>>
    SpringBoot整合Redis
    查看>>
    3D案例——旋转木马
    查看>>
    vue中导入导入 Mint-UI的注意事项
    查看>>
    Vue——mock模拟数据的使用
    查看>>