【华为面试题】栈

2023-10-27

在这里插入图片描述

思路

首先,遍历输入的压缩字符串。三种情况:
1.遇到字符 ‘{’:将其入栈。
2.遇到字符 ‘}’:计算重复次数,将栈中的字符组合成一个字符串,重复拼接后再入栈。
3.遇到字母字符:判断下一个字符是否是数字,若是数字,则将当前字母重复拼接后入栈;若不是数字,则直接将当前字母入栈。
最后,将栈中的字符串顺序拼接,得到解压缩后的字符串。

代码

function repeatString(str, times) {
  return str.repeat(times);
}

function decompressString(compressedStr) {
  let stack = [];

  for (let i = 0; i < compressedStr.length; i++) {
    let currentChar = compressedStr[i];

    // 当遇到开括号时,将其压入栈中
    if (currentChar === "{") {
      stack.push(currentChar);
    }
    // 当遇到闭括号时,从栈中取出对应的开括号之间的内容
    else if (currentChar === "}") {
      let pointer = i + 1;
      // 寻找闭括号后的数字,这代表了重复的次数
      while (
        pointer < compressedStr.length &&
        !isNaN(Number(compressedStr[pointer]))
      ) {
        pointer++;
      }

      let repeatTimes = Number(compressedStr.substring(i + 1, pointer));
      let contentToRepeat = "";

      // 从栈中提取并组装需要重复的内容
      while (stack[stack.length - 1] !== "{") {
        contentToRepeat = stack.pop() + contentToRepeat;
      }

      stack.pop(); // 移除开括号 "{"
      stack.push(repeatString(contentToRepeat, repeatTimes));
      i = pointer - 1; // 跳过处理过的数字
    }
    // 当遇到字母时
    else if (/[a-zA-Z]/.test(currentChar)) {
      let pointer = i + 1;
      // 寻找字母后的数字,这代表了重复的次数
      while (
        pointer < compressedStr.length &&
        !isNaN(Number(compressedStr[pointer]))
      ) {
        pointer++;
      }

      if (pointer !== i + 1) {
        let repeatTimes = Number(compressedStr.substring(i + 1, pointer));
        stack.push(repeatString(currentChar, repeatTimes));
        i = pointer - 1; // 跳过处理过的数字
      } else {
        stack.push(currentChar); // 如果字母后无数字,直接压入栈
      }
    }
  }
  return stack.join(""); // 合并栈内的内容为一个字符串
}

console.log(decompressString("{A3B1{C}3}3")); // 输出: AAABCCCAAABCCCAAABCCC


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

【华为面试题】栈 的相关文章

随机推荐

  • 解决数字字母不换行的问题

    当在标签中输入的是字母和数字的时候 会出现不换行的情况 导致内容不能显示完整 给p标签或者父标签div增加一下属性 text word break break all container word break break all 实现数字和
  • 博客摘录「 mysql char,mysql to_char」2023年6月12日

    场景 mysql 相仿to char to date 函数mysql 类似to char to date 函数mysql日期和字符相互转换方法date format date Y m d gt oracle中的to char str to
  • 文件没保存怎么恢复?3种方法恢复未保存office文档

    是否遇到过Excel Word或者PPT程序由于电脑断电 崩溃导致没有及时保存文档 如何恢复未保存的office文档文件 本文中提供了3种方法 用以帮助用户了解如何恢复未保存的office文档 以Word为例 数据蛙为大家图文介绍每种办法的
  • spring提前加载,懒加载,bean的作用域和注入注解讲解

    前言 sping知识随笔笔记 spring提前加载 懒加载 bean的作用域和注入注解讲解 spring提前加载 懒加载 bean的作用域和注入注解讲解 前言 1 depends on 2 bean的作用域 3 lazy init 懒加载
  • Spring Boot事务配置管理

    Spring Boot事务配置管理 场景 我们在开发企业应用时 由于数据操作在顺序执行的过程中 线上可能有各种无法预知的问题 任何一步操作都有可能发生异常 异常则会导致后续的操作无法完成 此时由于业务逻辑并未正确的完 成 所以在之前操作过数
  • HJ32 密码截取

    题目 HJ32 密码截取 题解 暴力截取所有子串 利用双指针判断子串是否为回文串 获取最大长度回文串 public int interceptPassword String password int maxLength 100 for in
  • vue 单页面(SPA) ,IOS端页面跳转后调用微信jssdk 时报错: "invalid signature"的解决方案

    背景 1 JS接口安全域名 OK 2 Android手机 微信开发者工具 测试分享都没问题 问题 在IOS手机微信端 从A页面 http a com A 跳转到B页面 http a com B 后 B页面进行分享时就会报签名 invalid
  • div让两个按钮并排显示在一行中

    做微信小程序 查了一些方法 对于我来说都不适用 有各种各样的问题 下面的这个试了 可以 wxml语法
  • java android小程序_java和android一些小程序

    Java 和 android 的一些小程序 1 给定字符串 String str a b c g b h l b h r v 剔除重 复的 并统计出之后其个数 public class zhaoshu1 构造遍历字符串及将重复出现的字符置空
  • 基于YOLOv5&opencv的交通道路三角锥检测系统(部署教程&源码)

    1 研究背景与意义 随着城市化进程的加快和交通流量的不断增加 交通安全问题成为了一个日益突出的社会问题 其中 交通道路上的三角锥是一种常见的交通安全设施 用于标记道路施工 交通事故现场 道路封闭等情况 然而 由于道路规模庞大 人力资源有限
  • GCN初步尝试

    任务如下 读取cora数据集 有2708个节点 每个节点有1433个特征 每个节点属于7类中的一类 节点之间存在边 注 cora的节点标号不是从0开始计数 故需要进行处理 附上一份简约代码 建立一个两层的GCN 这里的edges是经过节点重
  • GitBucket 搭建属于自己的GitHub。

    GitBucket是一个开源的代码管理仓库 就像GitHub一样 什么意思了 说白了我们可以下载GitBucket 然后放到自己服务器的Tomca容器上 就可以把代码往上面提交 GitHub你提交的代码都是可以被其它人看到的 除非你付费 但
  • 西数ZN540如何修改sector size

    写在前面 因需要在ZN540上挂载F2FS 故需要两块盘 一块传统SSD一块ZNS SSD 对于ZN540 信息如下 由于其扇区大小为4KiB 而自己服务器上没有逻辑扇区为4KiB的盘 例如三星883 所以当用883做传统盘的时候 格式化m
  • 基因富集分析 GSEA for time-course

    基因富集分析 Gene Set Enrichment Analysis GSEA 是一种针对全基因组表达谱芯片数据的分析方法 将基因与预定义的基因集进行比较 即综合现有的对基因的定位 性质 功能 生物学意义等信息基础 构建一个分子标签数据库
  • html怎么把视频设置为背景,如何将视频设置为网页背景

    第一步 准备工作 工欲善其事必先利其器 我们首先需要准备一个视频 第二步 html中引入视频 这里我们需要用到了video 标签 然后在source里面写视频的路径 autoplay用来使其自动播放 muted用来使其静音 loop为循环播
  • 数学建模:9 多元线性回归分析

    向前 后逐步回归筛选自变量 检验自变量之间是否多重共线性 计算VIF 内生性 核心变量与解释变量 虚拟变量 个数 分类数 1 否则有多重共线性 stata软件 回归模型假设检验 回归系数假设检验与解释 自变量对因变量的影响程度 标准化回归系
  • 如何检验数据正态分布_数据不符合正态分布,如何统计描述

    10万 文章推荐的科研神器 秒杀 谷歌翻译 不够用 再送两个 2020 04 09 介 绍 我们一般会在文献的统计方法部分看到这样的描述 对于数值变量 首先进行正态性检验 如果各组均满足正态性 采用均数 标准差 进行统计描述 采用t检验进行
  • php类中的私有化构造函数,在类中将构造函数私有化有什么用?

    通过提供私有构造函数 可以防止在此类之外的任何地方创建类实例 提供这种构造函数有几种用例 答 您的类实例是在static方法中创建的 static然后将该方法声明为public class MyClass private MyClass p
  • JAVA产生五位随机验证码

    用Java写出一个程序产生5位验证码 且前四位是字母不限大小写最后一位是数字 解法一 import java util Random public class YanZhengMa public static void main Strin
  • 【华为面试题】栈

    思路 首先 遍历输入的压缩字符串 三种情况 1 遇到字符 将其入栈 2 遇到字符 计算重复次数 将栈中的字符组合成一个字符串 重复拼接后再入栈 3 遇到字母字符 判断下一个字符是否是数字 若是数字 则将当前字母重复拼接后入栈 若不是数字 则