华为OD机试真题 Java 实现【简单的解压缩算法】【2023Q1 200分】,附详细解题思路

news2024/11/27 13:18:13

一、题目描述

现需要实现一种算法,能将一组压缩字符串还原成原始字符串,还原规则如下:

1、字符后面加数字N,表示重复字符N次。例如:压缩内容为A3,表示原始字符串为AAA。
2、花括号中的字符串加数字N,表示花括号中的字符串重复N次。例如:压缩内容为{AB}3,表示原始字符串为ABABAB。
3、字符加N和花括号后面加N,支持任意的嵌套,包括互相嵌套。例如:压缩内容可以{A3B1{C}3}3。

二、输入描述

输入一行压缩后的字符串。

三、输出描述

输出压缩前的字符串。

四、补充说明

  1. 输入保证,数字不会为0,花括号中的内容不会为空,保证输入的都是合法有效的压缩字符串;
  2. 输入输出字符串区分大小写;
  3. 输入的字符串长度为范围[1, 10000];
  4. 输出的字符串长度为范围[1, 100000];
  5. 数字N范围[1, 10000]

五、解题思路

  1. 创建一个栈Stack来辅助还原原始字符串;
  2. 使用一个指针i遍历压缩字符串;
  3. 当前字符为左花括号{时,将其入栈;
  4. 当前字符为字母时,将其转换为字符串并压入栈;
  5. 当前字符为数字时,找到连续的数字字符,并将其转换为整数time;
  6. 弹出栈顶元素,重复time次并拼接成字符串add;
  7. 将生成的add入栈;
  8. 当前字符为右花括号}时,依次弹出栈顶元素,直到遇到左花括号{,将弹出的元素拼接成字符串add并入栈;
  9. 将栈内元素依次弹出并拼接,得到最终的原始字符串;

六、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String line = sc.nextLine();

    int n = line.length();
    // 1、创建一个栈Stack<String>来辅助还原原始字符串
    Stack<String> stack = new Stack<>();
    // 2、使用一个指针i遍历压缩字符串
    int i = 0;
    while (i < n) {
        char c = line.charAt(i);
        // 3、当前字符为左花括号{时,将其入栈;
        if (c == '{') {
            stack.push(String.valueOf(c));
            i++;
            // 4、当前字符为字母时,将其转换为字符串并压入栈;
        } else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
            stack.push(String.valueOf(c));
            i++;
            // 5、当前字符为数字时,找到连续的数字字符,并将其转换为整数time;
        } else if (c >= '0' && c <= '9') {
            int j = i;
            while (j < n && line.charAt(j) >= '0' && line.charAt(j) <= '9') {
                j++;
            }

            int time = Integer.parseInt(line.substring(i, j));
            String pop = stack.pop();
            String add = "";
            // 6、弹出栈顶元素,重复time次并拼接成字符串add;
            for (int p = 0; p < time; p++) {
                add += pop;
            }
            // 7、将生成的add入栈;
            stack.push(add);
            i = j;
        } else {
            String add = "";
            // 8、当前字符为右花括号}时,依次弹出栈顶元素,直到遇到左花括号{,将弹出的元素拼接成字符串add并入栈;
            while (!stack.isEmpty()) {
                String pop = stack.pop();
                if (pop.equals("{")) {
                    break;
                }
                add = pop + add;
            }
            stack.push(add);
            i++;
        }
    }

    String ret = "";
    // 9、将栈内元素依次弹出并拼接,得到最终的原始字符串;
    while (!stack.isEmpty()) {
        ret = stack.pop() + ret;
    }
    System.out.println(ret);
}

七、效果展示

1、输入

{A3B1{C}3}3

2、输出

AAABCCCAAABCCCAAABCCC

3、说明

{A3B1{C}3}3代表A字符重复3次,B字符重复1次,花括号中的C字符重复3次,最外层花括号中的AAABCCC重复3次。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【云短信平台优惠活动】【2023Q1 200分】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

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

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

相关文章

tcpdump 抓包工具详细图文教程(上)

目录 一、tcpdump 抓包工具的基本介绍和学习基础 1.1 常用的抓包工具 1.2 tcpdump 抓包工具介绍 二、tcpdump 抓包工具使用环境和初体验 2.1 编译安装 tcpdump 2.2 抓包 三、讲解 TCP 协议报文报头 四、tcpdump 抓包工具常规过滤规则 4.1 tcpdump 的 host 和 net 过…

Flutter 又一元老离职,感谢 Tim 这些年的付出

前天在 insiders 收到 Tim Sneath 的离职邮件时感觉很震惊&#xff0c;因为他绝对是 Flutter 团队的元老级人物&#xff0c;几乎每次一次 Flutter 版本发布和社区活动都有他的身影&#xff0c;可以说他是我的 Flutter 领路人之一。 Tim 是在 2017 加入 Flutter 团队&#xff0…

SpringCloud微服务踩坑系列:UnknownContentTypeException

错误信息如下&#xff1a; org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.cyf.internalCommon.dto.ResponseResult] and content type [text/plain;charset…

使用WordPress提高企业敏捷性

喜欢WordPress的原因有很多&#xff1a;该平台非常适合内容管理以及控制预算。此外&#xff0c; 在 提高开发效率和简化项目管理方面&#xff0c;WordPress可以通过多种方式提供帮助。 对于任何企业业务&#xff0c;目标始终是在不影响质量的情况下更快地启动项目、发布修复和…

day3 -- select语句学习

文章目录 数据库和表的准备selectselect order byselect whereselect 高级过滤操作使用通配符进行过滤使用正则表达式进行搜索 数据库和表的准备 下载《mysql必知必会》提供的脚本用于创建样例表 cd /mnt/d/unix_dir wget https://forta.com/wp-content/uploads/books/067…

【Linux从入门到精通】进程的状态

当我们了解到进程是什么东西后&#xff0c;我们再来看看进程都会有那些状态。本篇文章会对进程的不同状态进行详解&#xff0c;希望会对你的理解有所帮助&#xff01; 文章目录 一、了解进程的不同状态 二、详解进程的不同状态 2、1 R运行状态&#xff08;running&#xff09; …

开源赋能 普惠未来|中软国际寄语 2023 开放原子全球开源峰会

中软国际作为行业领先的全球化软件与信息技术服务企业及数字化转型服务商&#xff0c;近年来积极布局开源生态&#xff08;OpenHarmony、openEuler&#xff09;、智能云、ERP、AIGC、教育科技、智能车六大赛道&#xff0c;加速业务转型创新。 中软国际为开放原子开源基金会白金…

文字环绕图片效果实现

书接上回&#xff0c;我们来讲讲如何实现“文字环绕图片”的效果吧。整体预计实现的效果如下&#xff1a; 日常杂谈 我喜欢看动漫&#xff0c;接下来的所有博客都会和我日常生活结合在一起写&#xff0c;这样感觉会让自己的博客会有温度&#xff0c;我感觉每个人都应该有自己的…

最新喜讯|易知微入选2023数字孪生解决方案提供商TOP50

近日&#xff0c;互联网周刊发布《2023数字孪生解决方案提供商TOP50》&#xff0c;杭州易知微科技有限公司在榜。 中国科学院主管的《互联网周刊》&#xff0c;创刊于1998年&#xff0c;是中国最具公信力的杂志之一&#xff0c;其颁布的榜单极具权威性与专业度&#xff0c;对产…

基于非局部图注意力网络的鲁棒三维形状分类

文章目录 Robust 3D Shape Classification via Non-local Graph Attention Network摘要本文方法Global Structure Network (GSN)Global Relationship Network (GRN)Local Feature Learning based on MLP-STNetwork Channel Fusion ModuleGlobal descriptor 实验结果 Robust 3D …

分布式锁的应用场景与分布式锁实现(四):基于MySQL实现分布式锁与分布式锁总结

分布式锁的应用场景与分布式锁实现&#xff08;三&#xff09;&#xff1a;基于Zookeeper实现分布式锁 基于MySQL实现分布式锁 ​ 不管是JVM锁还是MySQL锁&#xff0c;为了保证线程的并发安全&#xff0c;都提供了悲观独占排他锁。所以独占排他也是分布式锁的基本要求。 ​ …

在can协议的基础下编写DBC文件,然后使用该DBC文件下发can协议到底盘完整流程

目录 前言一、VectorCANdb下载及安装二、DBC文件的编写1.新建dbc文件2.建立dbc2.1根据CAN协议设置以下的signals2.2设置报文2.3建立报文与信号的关系2.4建立节点 三、编写程序使用UDP通信下发can协议1.查看can口、电脑ip以及端口号2.编写测试程序 前言 最近完成了一个项目&…

热烈庆祝兴业法拍网与宁波银行北京分行签订“法拍贷”业务合作

6月1日&#xff0c;兴业法拍网与宁波银行北京分行签订“法拍贷”合作协议。 “法拍贷”是以法院房产拍卖为核心、线上平台拓宽拍卖渠道、保险公司提供阶段性保证、公证机构加大司法效力、银行提供全程金融服务的“14”创新合作模式。该模式汇聚五方合力让更多竞拍人享受到便利…

2天时间3个面试,百度进了3面!

昨天和朋友复盘了一下最近的面试经历&#xff0c;分享给大家&#xff1a; 关于就业环境 忠告&#xff1a;如果不是在二三线买车买房结婚生子了&#xff0c;还是到一线城市去吧。 或者换个行业&#xff01; 关于焦虑和摆烂 如果你也在焦虑迷茫、精神内耗。找阳哥给你做“心理…

spring-boot版本影响Spring AOP @Before @Around @After等执行顺序

郁闷了半天&#xff0c;我通过AOP切面打印的日志顺序怪怪的&#xff0c;网上查了好几篇文章都说没问题&#xff0c;最后发现是springboot版本升级后Before Around After等执行顺序发生了变化。 1.切面类 Aspect// 这是一个切面 Component// 这是一个需要被装配的spring bean S…

零基础如何实现 Python 自动化办公 ?

996 一直是互联网老生常谈的话题了&#xff0c;但抛开其他只谈工作本身&#xff0c;你有没有想过&#xff0c;下班晚、加班&#xff0c;有时候可能是因为自己工作比较低效&#xff1f; 在这给你分享一个案例&#xff1a; 场景是在维护日活超过 3 亿用户的微博私信平台&#x…

Linux开机rc.local不自启动执行脚本其他一些问题进行补充说明

Linux开机rc.local不自启动执行脚本其他一些问题进行补充说明 在上一篇&#xff0c;我们讲了Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决 这一篇我们补充一些其他的问题 问题一&#xff1a;我怎么知道我rc.local里面的命令启动成功不成功呢&#xff0c;我怎…

为什么说 Java 比 C / C++ 慢?

因为C/C允许程序员做出更多选择。 选择更多&#xff0c;那么&#xff1a; 弊端&#xff1a;开发效率难以提高&#xff0c;因为有太多选择需要斟酌。 优势&#xff1a;执行效率可以逼近极限&#xff0c;因为不会有什么抽象拦住你。 举个例子吧&#xff1a;大家可能对Java无处不…

New bing出现“重定向”无法使用解决方法来了

我又来分享干货了&#xff01;&#xff01;&#xff01; 因为要润色论文&#xff0c;又是经过几天的折腾&#xff0c;终于可以正常使用bing聊天了&#xff0c;泪目&#xff01; 首先你要有VPN才能使用New bing聊天的&#xff01;要求使用edge浏览器&#xff08;虽然我最后用的…

电脑mp3转换器哪个好用?我来告诉你电脑mp3转换器哪个好

假如你下载了一些音乐或者录音文件&#xff0c;但是它们可能不是mp3格式的&#xff0c;而是其他格式&#xff0c;如wav、flac等。而有一些设备又只能播放mp3格式的音频&#xff0c;这时候就需要使用mp3转换器将其转换成mp3格式&#xff0c;以便于在各种设备上播放和分享。不过你…