华为OD机试 - 模拟目录管理 - 栈(Java 2024 D卷 100分)

news2024/11/24 17:02:33

在这里插入图片描述

华为OD机试 2024D卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。

支持命令:

  1. 创建目录命令:mkdir 目录名称,如mkdir abc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作。此命令无输出。
  2. 进入目录命令:cd 目录名称,如cd abc为进入abc目录,特别地,cd …为返回上级目录,如果目录不存在则不执行任何操作。此命令无输出。
  3. 查看当前所在路径命令:pwd,输出当前路径字符串。

约束:

  1. 目录名称仅支持小写字母;mkdir和cd命令的参数仅支持单个目录,如mkdir abc和cd abc;不支持嵌套路径和绝对路径,如mkdir abc/efg,cd abc/efg是不支持的。
  2. 目录符号为/,根目录/作为初始目录。
  3. 任何不符合上述定义的无效命令不做任何处理并且无输出。

二、输入描述

输入N行字符串,每一行字符串是一条命令

三、输出描述

输出最后一条命令运行结果字符串。

补充说明:

命令行数限制100行以内,目录名称限制10个字符以内。

四、测试用例

1、输入

mkdir abc
cd abc
pwd

2、输出

/abc/

3、输入

mkdir test
cd test
mkdir example
cd example
cd …
pwd

4、输出

/test/

5、说明

  • mkdir test 创建了目录 test。
  • cd test 进入目录 test。
  • mkdir example 在 test 目录下创建了目录 example(该命令实际不影响路径管理)。
  • cd example 进入目录 example。
  • cd … 返回上级目录 /test/。
  • pwd 输出当前路径 /test/。

在这里插入图片描述

五、解题思路

为了模拟目录管理功能,我们可以使用栈(Stack)来管理当前目录层级。具体步骤如下:

  1. 输入解析:读取所有命令并存储在列表中。
  2. 处理命令:遍历命令列表,处理 mkdir、cd 和 pwd 命令。
  3. 栈操作:
    • mkdir:不实际存储目录结构,只需忽略。
    • cd 目录名称:将目录名称推入栈中,表示进入该目录;如果是 cd …,则弹出栈顶,表示返回上级目录。
    • pwd:遍历栈,构建当前路径字符串,并记录最后一次 pwd 命令的结果。
  4. 输出结果:输出最后一次 pwd 命令的结果。

六、Java算法源码

package com.nezha.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<String> commands = new ArrayList<>();

        // 读取输入命令
        while (sc.hasNextLine()) {
            String line = sc.nextLine().trim();
            if (line.isEmpty()) break;
            commands.add(line);
        }

        // 调用处理命令的方法并输出结果
        String result = processCommands(commands);
        System.out.println(result);

        sc.close();
    }

    /**
     * 处理命令序列并返回最后一条 pwd 命令的结果
     * @param commands 命令列表
     * @return 最后一条 pwd 命令的结果
     */
    public static String processCommands(List<String> commands) {
        // 使用栈管理目录层级
        Stack<String> pathStack = new Stack<>();
        pathStack.push("/"); // 根目录

        String lastPwdResult = "";

        for (String command : commands) {
            // 处理 mkdir 命令
            if (command.startsWith("mkdir ")) {
                // mkdir 命令忽略,因为不需要实际存储目录结构
            }
            // 处理 cd 命令
            else if (command.startsWith("cd ")) {
                String dirName = command.substring(3); // 提取目录名称
                if (dirName.equals("..")) {
                    if (pathStack.size() > 1) {
                        pathStack.pop(); // 返回上级目录
                    }
                } else if (!dirName.isEmpty() && dirName.length() <= 10) {
                    pathStack.push(dirName); // 进入指定目录
                }
            }
            // 处理 pwd 命令
            else if (command.equals("pwd")) {
                lastPwdResult = getCurrentPath(pathStack); // 获取当前路径
            }
        }
        return lastPwdResult;
    }

    /**
     * 获取当前路径字符串
     * @param pathStack 目录栈
     * @return 当前路径字符串
     */
    public static String getCurrentPath(Stack<String> pathStack) {
        StringBuilder path = new StringBuilder();
        for (String dir : pathStack) {
            if (!dir.equals("/")) {
                path.append(dir).append("/");
            } else {
                path.append(dir);
            }
        }
        return path.toString();
    }
}

七、效果展示

1、输入

mkdir abc
mkdir def
cd abc
mkdir xyz
cd …
cd def
pwd

2、输出

/def/

3、说明

  • mkdir abc 和 mkdir def 创建了目录 abc 和 def。
  • cd abc 进入目录 abc。
  • mkdir xyz 在 abc 目录下创建了目录 xyz(该命令实际不影响路径管理)。
  • cd … 返回上级目录 /。
  • cd def 进入目录 def。
  • pwd 输出当前路径 /def/。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

博弈论,CF 1600E - Array Game

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1600E - Array Game 二、解题报告 1、思路分析 记最长递增前缀长度为L&a…

点云倒角距离(Chamfer Distance,CD)

本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“【python三维深度学习】python三维点云从基础到深度学习_python3d点云从基础到深度学习-CSDN博客”。配套书籍《人工智能点云处理及深度学习算法》提供更加全面和系统的解析。 点云倒角距离&#xff08…

零基础5分钟上手亚马逊云科技-高可用Web系统设计最佳实践

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

DT浏览器使用教程之如何使用智能问答

DT浏览器使用教程之如何使用智能问答&#xff0c; 在DT浏览器首页点智能问答&#xff0c; 在智能问答页面写上相关问题&#xff0c;点提问&#xff0c; 等待一会儿就可以显示出相关答案了&#xff0c; 点右上角保存&#xff0c;可以保存到DT浏览器的笔记本 DT浏览器是一款适合…

450nm 高功率蓝光激光模组使用多长时间需要更换

450nm蓝光激光模组以其独特的波长特性和高功率输出&#xff0c;成为了市场上备受瞩目的产品。然而&#xff0c;对于用户而言&#xff0c;了解这类高功率激光模组的使用寿命及何时需要更换&#xff0c;是确保工作效率和设备安全性的重要环节。本文将带大家了解450nm 高功率蓝光激…

华为流程框架梳理及实施

获取全部108页完成PPT材料&#xff0c;见下图

游戏发行技术体系

游戏发行技术体系 自认为一个合格的发行技术体系应该包括以下11个部分&#xff0c;并且进行了大致的初步能力划分。 其中&#xff0c;大部分的技术平台在市面上存在三方系统&#xff0c;固在左侧单独的列了一个三方&#xff0c;用来补充后续一些替代品、个人有所遗漏的内容。…

PostgreSQL案例:planning time超长问题分析

问题分析概述 库总是OOM&#xff0c;分析到是执行计划生成有问题&#xff0c;planning time 1秒&#xff0c;planning shared hit 100w。一通分析&#xff0c;定位到是统计信息基表pg_statistic膨胀&#xff0c;由于会话首次SQL执行时的CatCacheMiss&#xff0c;导致backend访…

学习C语言 第十九天

第一项 C 内存管理 内存是通过指针变量来管理的。通过一些函数和运算符&#xff0c;可以对内存进行操作&#xff0c;包括分配、释放、移动和复制等。 序号函数和描述1void *calloc(int num, int size); 在内存中动态地分配 num 个长度为 size 的连续空间&#xff0c;并将每一…

【安全靶场】-DC-7

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…

企业差旅报销管理:如何管控差旅成本?

如何高效地管理和控制差旅成本,是每个企业财务部门都要面对的重要课题。作为一体化差旅报销管理平台,分贝通提供了从事前、事中到事后的全流程差旅费控方案,帮助企业实现精细化管理和成本控制。本文将详细介绍分贝通如何通过其全流程差旅费控方案帮助企业管控差旅成本,提升管理…

Ansible初识

ansible初识 Ansible是一种自动化工具&#xff0c;用于配置管理、应用程序部署和任务自动化。它基于Python语言开发&#xff0c;使用SSH协议进行通信&#xff0c;并且不需要在被管理的主机上安装任何客户端。Ansible使用简单的YAML语言来描述任务和配置&#xff0c;使得操作简…

ROS2 入门控制命令(以海龟为例)和工作空间介绍

目录 前言1 打开海龟显示窗口2 启用键盘控制窗口3 海龟按圆形轨迹运动&#xff08;圆周运动&#xff09;4 产生新的海龟5 记录并播放海龟运动轨迹ros2 bag 功能5.1 记录5.2 播放 ROS的工作空间6 创建功能包7 编译功能包 前言 命令方向特别注意空格&#xff0c;冒号后面加空格要…

力扣 | 子数组滑动窗口 | 560. 和为 K 的子数组、209. 长度最小的子数组、862. 和至少为 K的最短子数组、220. 存在重复元素 III

文章目录 一、非滑动窗口1.1 560/LCR 010. 和为 K 的子数组1.2 862. 和至少为 K 的最短子数组 二、滑动窗口2.1 209/LCR 008. 长度最小的子数组2.2 220. 存在重复元素 III 下面的题并不是全都由滑动窗口解决&#xff0c;有的题可以&#xff0c;有的题不可以&#xff0c;放入滑动…

《黑神话:悟空》Steam峰值超200万 国内玩家占9成

《黑神话&#xff1a;悟空》自今天白天上午10点解锁以来&#xff0c;Steam在线峰值不断创新高&#xff0c;白天创下的140万记录又被晚上超过。据SteamDB统计&#xff0c;随着更多“打工人”回家休息&#xff0c;《黑神话&#xff1a;悟空》Steam同时在线已经突破了200万&#x…

编程之旅:从挫折到突破的心路历程

你是如何克服编程学习中的挫折感的&#xff1f; 编程学习之路上&#xff0c;挫折感就像一道道难以逾越的高墙&#xff0c;让许多人望而却步。然而&#xff0c;真正的编程高手都曾在这条路上跌倒过、迷茫过&#xff0c;却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…

软件产品测试报告内容简析,第三方软件测试公司测试服务分享

在数字化快速发展的今天&#xff0c;软件产品的质量直接影响着企业的竞争力与市场表现&#xff0c;软件产品测试报告作为整个测试过程的总结性文档至关重要。 一、软件产品测试报告   软件产品测试报告是测试团队对软件系统的质量评估和诊断的重要文件&#xff0c;它包含了对…

LabVIEW滚动轴承故障诊断系统

滚动轴承是多种机械设备中的关键组件&#xff0c;其性能直接影响整个机械系统的稳定性和安全性。由于轴承在运行过程中可能会遇到多种复杂的工作条件和环境因素影响&#xff0c;这就需要一种高效、准确的故障诊断方法来确保机械系统的可靠运行。利用LabVIEW开发的故障诊断系统&…

VMwareWorkstation安装ESXi 7.0U3系统详细教程

版本信息 VMwareWorkstation版本如下&#xff1a; ESXI系统镜像版本如下&#xff1a; 安装步骤 ESXi虚拟机硬件配置 选择创建新的虚拟机 选择自定义&#xff0c;点击下一步 选择ESXi 7.0&#xff0c;点击下一步 选择稍后安装操作系统&#xff0c;点击下一步 按照图下所示选择…

十个方面100个网络安全相关知识点,快来学习!(上)

网络安全风险无处不在&#xff0c;现梳理了100个网络安全相关的小知识&#xff0c;希望能进一步提升大家的安全意识&#xff0c;帮助大家建立更加安全的网络环境。 一、账号密码安全 1. 如果有初始密码&#xff0c;应尽快修改。 2. 密码长度不少于8个字符。 3. 不要使用单一…