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日

相关文章

  • javaweb登录验证码的实现方法

    下面是“JavaWeb登录验证码的实现方法”的详细攻略: 什么是验证码 验证码(Verification Code)是一种用于判断用户是否为人类的简单程序,主要目的是防止恶意程序对网站进行暴力破解或网络爬虫行为。常见的验证码包括数字、字母、图片、数学公式等形式,验证码输入错误时,通常会跳出提示框要求重新输入。 JavaWeb登录验证码的实现方法 JavaWe…

    Java 2023年6月15日
    00
  • 数据库中经常用到的操作和管理数据库的语句总结

    下面是数据库中经常用到的操作和管理数据库的语句总结的攻略。 数据库的操作 创建数据库 创建数据库的语句如下: CREATE DATABASE db_name; 其中,db_name 为数据库的名称。在执行此命令时,数据库的名称必须是唯一的。 删除数据库 删除数据库的语句如下: DROP DATABASE db_name; 其中,db_name 为要删除的数据…

    Java 2023年6月15日
    00
  • Java开发实现的Socket双向通信功能示例

    下面就是讲解“Java开发实现的Socket双向通信功能示例”的完整攻略。 1. Socket双向通信概述 Socket是一种网络通信协议,可以在网络上实现进程间的通信,它是一种双向的通信机制,也称为套接字。在Java中,Socket通常指的是Java socket API,也就是Java中的网络编程模块。 Java中的Socket通常用于网络编程,可以在两…

    Java 2023年5月26日
    00
  • Java SpringMVC的自定义异常类

    Java SpringMVC的自定义异常类 在 Java SpringMVC 中,异常处理是非常重要的一部分。通过自定义异常类,我们可以更好地处理异常情况,并提供更好的用户体验。本文将详细讲解如何创建和使用自定义异常类,包括如何创建异常类、如何在 Controller 中使用异常类、如何在全局异常处理器中处理异常等,并提供两个示例说明。 创建异常类 在 Ja…

    Java 2023年5月18日
    00
  • java实现服务器文件打包zip并下载的示例(边打包边下载)

    让我详细讲解“Java实现服务器文件打包zip并下载的示例(边打包边下载)”的完整攻略。 1. 准备工作 在开始操作之前,需要准备以下两件事情: 相应的Java开发环境; 一个Web服务器,如Tomcat。 2. 解压文件并创建Java项目 首先,需要从服务器中解压需要打包的文件。接下来,在Java项目中创建以下文件夹: src/main/java src/…

    Java 2023年5月19日
    00
  • Java中的ClassCastException是什么?

    Java中的ClassCastException是一种运行时异常,当程序试图将一个ParentClass类型的对象转换为ChildClass类型的对象时,如果该ParentClass对象的实际类型不是ChildClass或其子类,则会出现ClassCastException。这通常会发生在Java中进行类型转换(即强制类型转换)时。 例如: ParentCl…

    Java 2023年4月27日
    00
  • java中断线程的正确姿势完整示例

    针对 “java中断线程的正确姿势完整示例”,以下是完整攻略: 什么是线程中断? 线程中断就是让一个正在运行的线程停止运行,也就是让线程停止执行后续的代码,退出执行状态。 为什么需要中断线程? 中断线程的主要目的是为了优雅的停止线程,避免造成系统死锁或资源泄露等。 Java如何中断线程? Java中断线程通常有两种方式: Thread.interrupt()…

    Java 2023年5月19日
    00
  • Java创建ZIP压缩文件的方法

    下面是Java创建ZIP压缩文件的方法的完整攻略,包含过程及两条示例代码,希望能对你有所帮助。 1. 创建ZIP压缩文件的方法 Java提供了ZipOutputStream类来实现创建ZIP文件的功能。ZipOutputStream类是一个过滤器流,它可以将数据写入Zip文件中,并且支持压缩。下面是创建ZIP文件的步骤: 创建ZipOutputStream对…

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