华为OD机试真题--解压原始报文JavaScript

2023-11-09

1. 题目

为了提升数据传输的效率,会对传输的报文进行压缩处理。输入一个压缩后的报文,请返回它解压后的原始报文。

  1. 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。
  2. 输入描述:
    • 输入压缩后的报文:
      1. 不考虑无效的输入,报文没有额外的空格,方括号总是符合格式要求的;
      2. 原始报文不包含数字,所有的数字只表示重复的次数 n ,例如不会出现像 5b 或 3[8] 的输入;
  3. 输出描述:
    • 解压后的原始报文
  4. 注:
    • 原始报文长度不会超过1000,不考虑异常的情况

示例1
输入
3[k]2[mn]
输出
kkkmnmn
说明
k 重复3次,mn 重复2次,最终得到 kkkmnmn

示例2
输入
3[m2[c]]
输出
mccmccmcc
说明
m2[c] 解压缩后为 mcc,重复三次为 mccmccmcc”

2. 解题思路

  1. 对于字符串解析问题,我们很容易想到使用栈来解决。将字符串中除 ] 之外的字符推入栈中,之后当遇到 ] 时,我们让栈中的数字或字母进行出栈,然后进行一些操作。

  2. 那么如何判断什么时候停止出栈呢?毫无疑问,我们需要加一个状态判断,如果满足这个状态,我们就让栈弹出的循环停下来。而这个状态,其实已经存在于字符串中了,那就是 [ 字符。因此我们让 [ 字符也一起入栈,等我们栈顶弹出时发现遇到了第一个 [ 时,就立即停止栈的弹出,然后继续将报文后续的字符入栈,这就是整个解析的大致过程。

  3. 但是问题也随之而来,当我们栈弹出时,我们怎么判断弹出的是一个完整的序列呢?就拿 3[m2[c]] 这串报文来说,我们弹出 2 的时候怎么知道已经解析完了数字部分呢?它也可能是一个两位数或者更多位的数字,因此我们在这里要进行一系列判断,然后还要进行其他操作,比如暂存字符串、数学运算。有没有更好的方法规避这个问题?有的,如果我们提前将报文转成数组,然后让英文字母和数字单独连接在一起,之后我们就不需要进行额外的判断和操作了。具体来说:

    // 对于像下面这种报文
    let str = '34[m22[cn]]';
    // 我们将其转为数组后,将数字和字母分别串联在一起后就变成了下面这样的形式:
    let arr = ['34','[', 'm', '22', '[', 'cn', ']', ']'];
    

    经过这样的转变,我们就无需对数字或者字母的完整性做任何判断,避免了复杂的逻辑。

  4. 解决了栈中字符的完整性判断问题&

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD机试真题--解压原始报文JavaScript 的相关文章

随机推荐

  • Ubuntu下安装mysql笔记

    1 首先更新本地存储库索引 执行sudo apt update 2 执行安装命令 sudo apt install mysql server y 遇到下面的报错 E Could not get lock var lib dpkg lock
  • flutter 自己发消息,列表跳到最底部,收到消息,如果不在底部就显示“有未读消息”,点击跳到最底部

    先判断该消息是否时自己发的 如果是自己发的 列表就跳到底部 如果不是自己发的消息 就判断是否在底部 如果不在底部就显示 有未读消息 如果在底部就不用显示 有未读消息 点击 有未读消息 跳转到列表底部 因为列表反转了 所以底部是0 顶部是列表
  • 常见的#pragma预处理命令

    pragma comment 将一个注释记录放置到对象文件或可执行文件中 pragma pack 用来改变编译器的字节对齐方式 pragma code seg 它能够设置程序中的函数在obj文件中所在的代码段 如果未指定参数 函数将放置在默
  • VLP-16 velodyne + kinect dk 复现 LeGO-LOAM

    参考 使用自己的激光雷达 数据集运行lego loam 修改代码教程 和道一文字 的博客 CSDN博客 LeGO LOAM 编译安装与运行 Yeah2333的博客 CSDN博客 lego loam运行 一 配置VLP16 sudo apt
  • Inkscape插入LaTeX公式

    Inkscape插入LaTeX公式 Inkscape软件自身没有插入公式的功能 在一些需要公式配合的图片 Inkscape无法正常制图 为了解决该问题 本文采用Inkscape中安装TexText扩展的方法 使得Inkscape在制图过程中
  • 在阿里云的生产环境下:nginx同一域名下配置多个静态页面

    背景说明 这两天公司前端开发工程师提出要求 在公司的主业务域名中加一个静态页面进去 在这里我就不透露公司的域名是什么 我们把域名估且为www ganbing com 这种需求很多公司是经常有的 写一个重定向啊 加个静态页面啊 实现跨域访问啊
  • java的值传递

    java中只有值传递 1 对于基本数据类型 改变形参的值不会影响实参的值 2 对于引用类型 改变形参的值会不会影响实参的值 这个我们得分情况 情况1 修改的是形参的指向的话就不改变原来实参的值 情况2 修改的是形参的值的话就会改变原来实参的
  • 使用three.js渲染第一个场景和物体

    一 效果图 二 渲染场景和物体的步骤 创建场景 Scene 在 three js 中创建场景通过调用 THREE Scene 方法 然后将其赋值给变量 var scene new THREE Scene 创建相机 Camera 在 thre
  • ThreadLocal与InheritableThreadLocal及线程池的影响

    在web开发中使用了ThreadLocal本地线程存储拦截器解析的用户信息 方便在下文代码中调用 但是在springboot中使用 Async开启异步操作时 就会造成 子线程无法拿到父本地线程数据 拿到一些脏数据 1 Inheritable
  • 为什么超凡先锋显示未选择服务器,超凡先锋画质不太流畅怎么弄 游戏画质设置方法介绍_超凡先锋...

    超凡先锋是一款逃离塔科夫玩法的射击游戏 这款游戏对玩家的手机配置需求还是比较高的 那么超凡先锋画质不太流畅怎么弄呢 下面我们就一起来看一下游戏画质设置方法介绍吧 一 画质设置步骤介绍 超凡先锋的优化制作的还是非常不错的 大家如果配置不足或者
  • c语言求阶乘和的流程图_Introduction to CSAPP(十四):流程控制指令与 C 语言条件判断与循环

    条件码 在之前的内容中 我们提到EFLAGS 寄存器中有一些条件码 这些条件码为流程控制的跳转提供了一定的能力 CF 进位标识 最近的操作使得最高位产生的了进位 ZF 零标识 最近的操作所得的结果为0 SF 符号标识 最近的操作所得的结果为
  • 。。。闯关

    还没写到难的地方 不过主要还是猜 前面过于简单后面感觉又太难 不太适合我这种菜鸟 不过还是可以学到东西的 先不写了 这里只是帮我简单记录一下思路 并非想破坏游戏体验 1 url 2 源码链接 3 源码链接 4 源码最底下或F12 5 根据提
  • idea远程调试线上jar包

    有时候本地代码没问题但在线上运行会报错 这时候可以使用idea的remote功能调试线上jar包 步骤1 步骤2 新建remote 步骤3 配置服务器ip和端口 并复制生成的JVM参数供之后使用 步骤4 打jar包 并将生成的jar包放到服
  • GPT-4:模型架构、训练方法与 Fine-tuning 详解

    本文将详细介绍 GPT 4 的模型结构 训练数据准备和微调方法 我们将深入了解 Transformer 架构 并学习如何准备训练数据和微调 GPT 4 模型 同时 我们还提供了相关代码示例以帮助您更好地理解和实践这些概念 希望本文能为您在使
  • Java EE 企业级应用 复习 Spring中Bean的管理

    Bean的实例化 什么是Bean的实例化 Spring容器自动地帮助我们生成对应的Bean对象 Bean的实例化方法 构造方法实例化 静态工厂实例化 实例工厂实例化 构造方法实例化 package com itheima public cl
  • http-server安装成功后,提示command not found

    版权声明 本文为博主原创文章 未经博主允许不得转载 http server安装成功后 提示command not found 如图所示 解决方法 执行vim zshrc 加上红框框住的内容 然后在项目目录下执行http server就可以了
  • 操作系统-在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收。

    实验六 一 实验题目 在分页式管理方式下采用位示图来表示主存分配情况 实现主存空间的分配和回收 二 实验内容 1 分页式存储器把主存分成大小相等的若干块 作业的信息也按块的大小分页 作业装入主存时可把作业的信息按页分散存放在主存的空闲块中
  • UIUC同学Jia-Bin Huang收集的计算机视觉代码合集(ZZ)

    转自 http www cnblogs com idaidai archive 2012 03 01 2375800 html UIUC的Jia Bin Huang同学收集了很多计算机视觉方面的代码 链接如下 https netfiles
  • django2.x报错No module named 'django.core.urlresolvers'

    解决方法就是 from django urls import reverse 最近从django1 9迁移到django2 0中出现一个意外的报错 这个报错的原因在stack overflow上有很直接的解释 但是百度上并没有直接的答案 简
  • 华为OD机试真题--解压原始报文JavaScript

    1 题目 为了提升数据传输的效率 会对传输的报文进行压缩处理 输入一个压缩后的报文 请返回它解压后的原始报文 压缩规则 n str 表示方括号内部的 str 正好重复 n 次 注意 n 为正整数 0 lt n lt 100 str只包含小写