71 简化路径(模拟、栈)
发布日期:2021-05-07 21:50:04 浏览次数:12 分类:精选文章

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

    上一篇:20 有效的括号(栈的使用)
    下一篇:32 最长有效括号(递归、栈)

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年03月28日 07时00分32秒