Java C++题解leetcode1598文件夹操作日志搜集器

让我详细地讲解一下Java C++题解LeetCode 1598文件夹操作日志搜集器的完整攻略。

简介

这是一道LeetCode的题目。题目描述为:假设您正在设计一款简单的奇怪编辑器,每次打开它时,编辑器都会仅显示全部文本中最后一次输入的字符。执行一些操作后,您希望能够查看并恢复到某些之前的状态。为了实现这个功能,您需要设计一个操作日志记录数据结构。该数据结构将保存每个操作(仅三种:下面详细讲解),以及实施该操作时文件夹的实际名称。

题目要求实现一个函数,它将读取操作日志,并返回最后计算机文件夹的名称。

操作类型

题目中的操作有三种。

  • ./: 这个操作表示当前目录,不需要进行任何操作。
  • ../: 这个操作表示返回上一级目录。
  • x/: 这个操作表示进入到x目录。

解题思路

解题的主要思路是建立一个栈来保存目录历史。如果遇到当前目录./,则不做任何处理。如果遇到返回上一级目录../,则弹出栈顶元素。如果遇到进入下一级目录x/,则将目录入栈。

最后栈中剩下的就是最后的目录名称。

实现代码

下面是Java实现代码:

class Solution {
    public String findFolder(String[] logs) {
        Stack<String> stack = new Stack<>();
        for (String log : logs) {
            if (log.equals("./")) {
                // 当前目录,不做任何处理
            } else if (log.equals("../")) {
                // 返回上一级目录
                if (!stack.empty()) {
                    stack.pop();
                }
            } else {
                // 进入下一级目录
                stack.push(log);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (String s : stack) {
            sb.append('/');
            sb.append(s);
        }
        return sb.length() == 0 ? "/" : sb.toString();
    }
}

下面是C++实现代码:

class Solution {
public:
    string findFolder(vector<string>& logs) {
        stack<string> st;
        for (string log : logs) {
            if (log == "./") {
                // 当前目录,不做任何处理
            } else if (log == "../") {
                // 返回上一级目录
                if (!st.empty()) {
                    st.pop();
                }
            } else {
                // 进入下一级目录
                st.push(log);
            }
        }
        string ans = "";
        while (!st.empty()) {
            ans = "/" + st.top() + ans;
            st.pop();
        }
        return (ans == "") ? "/" : ans;
    }
};

示例

下面是两条示例:

示例 1:

输入:logs = ["d1/","d2/","../","d21/","./"]

输出:"d1/d21"

解释:第一条操作将进入名为“d1”的目录。第二个操作将进入名为“d2”的目录。然后,第三个操作将返回上一个目录,返回到“d1”。逐步地,我们进入“d21”目录,然后我们执行了操作“./”,没有任何更改。因此,最后的目录名称为“d1/d21”。

示例 2:

输入:logs = ["d1/","d2/","../","../","d21/","./"]

输出:"d21"

解释:第一个操作将进入名为“d1”的目录。然后,我们进入名为“d2”的目录。然后,我们返回上一个目录,回到“d1”。接下来,我们返回到上一个目录,回到初始目录。然后,我们进入名为“d21”的目录,最后我们执行了操作“./”,没有任何更改。因此,最后的目录名称为“d21”。

希望我的解答能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java C++题解leetcode1598文件夹操作日志搜集器 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Linux下启动tomcat的方法

    下面是详细讲解“Linux下启动tomcat的方法”的完整攻略。 Linux下启动tomcat的方法 Tomcat是一种用于Java开发的Web服务器,它可运行在Windows和Linux等多种操作系统上。在Linux下启动Tomcat需要以下步骤: 步骤一:下载并安装Tomcat 首先需要下载Tomcat,并将其安装在Linux的合适目录下。可以从Tomc…

    Java 2023年5月19日
    00
  • Java中Spock框架Mock对象的方法经验总结

    Java中Spock框架Mock对象的方法经验总结 简介 Spock是一个基于Geb和JUnit的开源Java测试框架,它支持BDD(行为驱动开发)并提供了很多有用的功能。其中一个最常用的功能是Mock对象。这篇攻略将介绍如何在Java中使用Spock框架Mock对象。 Mock对象的定义 Mock对象是经过模拟的对象,代替了真实的对象。Mock对象可以控制…

    Java 2023年5月26日
    00
  • 一文探索Java文件读写更高效方式

    针对Java文件读写更高效方式的攻略,我可以提供以下内容: 1. 使用NIO NIO(New I/O),即为非阻塞 IO。相比于传统的 IO,它可以提供更高效的文件读写方式。其主要的类库为java.nio。使用NIO的关键是Buffer和Channel两个概念。其中Buffer为缓冲区,用来读写数据;Channel则代表数据源,如文件或网络连接,我们从Cha…

    Java 2023年5月20日
    00
  • JUC中的wait与notify方法实现原理详解

    JUC中的wait与notify方法实现原理详解 JUC(Java Util Concurrent)是Java中用于处理多线程编程的库,其中包含了大量的线程处理类,其中常用的类之一是Object类中的wait方法和notify方法。本文将详细讲解JUC中的wait与notify方法实现原理。 wait方法的实现原理 wait方法是Object类中的一个方法,…

    Java 2023年5月26日
    00
  • Spring Security 安全框架应用原理解析

    Spring Security 安全框架应用原理解析 什么是 Spring Security? Spring Security 是一个基于 Spring 框架的安全框架,它可以为 Spring 应用程序提供全面的安全性解决方案,包括身份验证、授权、攻击防范等功能,保护应用程序的安全性。 Spring Security 的核心概念 1. 身份验证 Spring…

    Java 2023年5月20日
    00
  • JDBC以反射机制加载类注册驱动连接MySQL

    JDBC以反射机制加载类注册驱动连接MySQL的攻略如下: 导入相关的JDBC驱动jar包。假设我们使用MySQL数据库,需要下载并导入mysql-connector-java.jar包。如果不清楚如何导入jar包,可以自行查阅相关教程。 使用反射机制动态加载类。JDBC4.0以后的版本,不需要显式地调用Class.forName()方法加载驱动程序,但是我…

    Java 2023年6月16日
    00
  • Java实现快速并查集

    让我来为大家详细讲解一下Java实现快速并查集的完整攻略。 什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。并查集的进阶版可以使用路径压缩和按秩合并的算法,使时间复杂度更加优秀。 Java实现快速并查集 下面我们将通过一个完整的Java实现过程,来详细讲解如何实现一个快…

    Java 2023年5月19日
    00
  • Java中的命名与目录接口JNDI基本操作方法概览

    下面我将详细讲解“Java中的命名与目录接口JNDI基本操作方法概览”的完整攻略。 什么是JNDI JNDI (Java Naming and Directory Interface,Java 命名和目录接口) 是 Java 平台上命名和目录服务的应用编程接口,用于帮助 Java 应用程序访问各种命名和目录服务。JNDI 定义了程序访问命名和目录服务的通用接…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部