华为OD机试真题 Java 实现【一种字符串压缩表示的解压】【2022Q4 100分】,附详细解题思路

news2024/9/24 5:23:45

在这里插入图片描述

一、题目描述

有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串,若输入合法则输出解压缩后的字符串,否则输出字符串“!error”来报告错误。

二、输入描述

输入一行,为一个ASCII字符串,长度不会超过100字符,用例保证输出的字符串长度也不会超过100字符。

三、输出描述

若判断输入为合法的经过压缩后的字符串,则输出压缩前的字符串;若输入不合法,则输出字符串“!error”。

四、解题思路

  1. 读取输入的字符串;
  2. 检查字符串的最后一个字符是否为数字,如果是数字则表示输入不合法,输出"!error";
  3. 使用StringBuilder sb 初始化一个空字符串用于存储解压缩后的结果;
  4. 使用正则表达式将字符串分割为两个数组:strArr 存储连续相同字母的部分,numArr 存储连续个数;
  5. 遍历 strArr 数组,对于每个连续相同字母的部分 item:
    • 如果 item 的长度大于等于3,说明存在连续超过两个相同字母的部分,输入不合法,输出"!error";
    • 将 item 添加到 sb 中;
    • 如果当前位置 i 小于 strArr 数组的长度减1,表示还有下一个连续相同字母的部分:
      • 获取下一个连续相同字母的部分 next;
      • 如果当前位置 i 小于等于 numArr 数组的长度减1,表示还有下一个连续个数:
        • 将 numArr 数组中对应位置的数字转换为整数 num;
        • 获取 next 的第一个字符 c;
        • 将 c 重复 num-1 次添加到 sb 中;
  6. 输出 sb 的字符串表示解压缩后的结果;

五、Java算法源码

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while (in.hasNextLine()) {
        String inputStr = in.nextLine();
        int length = inputStr.length();
        if (Character.isDigit(inputStr.charAt(length-1))) {
            System.out.println("!error");
            continue;
        }
        StringBuilder sb = new StringBuilder();

        String[] strArr = inputStr.split("[0-9]+");
        String[] numArr = inputStr.split("[a-z]+");

        loop:
        for (int i = 0; i < strArr.length; i++) {
            String item = strArr[i];

            if (item.length() >=3) {
                for (int j = 0; j < item.length()-2; j++) {
                    if (item.charAt(j) == item.charAt(j+1) && item.charAt(j) == item.charAt(j+2)) {
                        System.out.println("!error");
                        break loop;
                    }
                }
            }
            sb.append(item);
            if (i < strArr.length-1) {
                String next = strArr[i+1];
                if (i<=numArr.length-1) {
                    int num = Integer.parseInt(numArr[i]);
                    char c = next.charAt(0);
                    for (int j = 0; j < num-1; j++) {
                        sb.append(c);
                    }
                }
            }

        }
        System.out.println(sb.toString());
    }
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

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

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

在这里插入图片描述

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

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

相关文章

基于深度学习的视频美颜SDK技术创新与应用案例分析

很多人在拍摄视频时会感到自己的皮肤不够好看&#xff0c;因此需要使用美颜功能。同时&#xff0c;视频美颜也是很多短视频App的核心功能之一。为了提供更加高效、准确的视频美颜功能&#xff0c;很多公司开始研发基于深度学习的视频美颜SDK技术。 与传统的图像处理技术相比&a…

kafka 安装快速入门

直接上干货&#xff0c;我们公司最近要进行消息推送指定软件kafka,直接走起。 1.下载 kafka 是apache的项目。下载地址&#xff1a;kafka.apache.org/ 点击download kafka 进入查看相关版本进行下载。 我这里用的版本比窘旧一点&#xff0c;公司技术一切求稳。 下载好安装包就已…

论文笔记:Normalizing Flows for Probabilistic Modeling and Inference

Abstract 正则流&#xff08;Normalizing flows&#xff09;提供了一种通用的机制来定义富有表达力的概率分布&#xff0c;只需要指定一个&#xff08;通常简单的&#xff09;基础分布和一系列可逆变换。 Intraduction 正则流通过将简单的密度通过一系列变换来产生更丰富、可…

怎么选择适合爬虫的代理IP,使用时需要注意什么

网络爬虫工作离不开代理服务器的支持&#xff0c;但并不是所有的代理服务器都适合爬虫工作。那么如何选择适合爬虫的代理服务器呢&#xff1f; 选择适合爬虫的代理服务器需要考虑以下几个方面&#xff1a; 1、代理服务器的稳定性&#xff1a;稳定可靠的代理服务器更能够保证爬虫…

JPEG压缩基本原理

JPEG算法的第一步是将图像分割成8X8的小块。 在计算机中&#xff0c;彩色图像最常见的表示方法是RGB格式&#xff0c;通过R(Red)、G(Green)A和(Blue)组合出各种颜色。 除此以外&#xff0c;还有一种表示彩色图像的方法&#xff0c;称为YUV格式。Y表示亮度&#xff0c;U和V表示…

【C++】一文带你吃透C++继承

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; C/C专栏 &#x1f319;那些看似波澜不惊的日复一日&#xff0c;…

Docker attach VS exec

我们知道&#xff0c;进入容器常用的两种方式为&#xff1a;docker exec ...、docker attach ...&#xff0c;那这两者有什么区别呢&#xff1f; 首先&#xff0c;运行一个测试容器&#xff0c;并在启动容器时运行相关指令&#xff0c;如下&#xff1a; docker run --name te…

JVM学习笔记一

程序计数器是一块儿较小的内存, 请你谈谈你对JVM的理解?java8虚拟机和之前的有什么变化更新?什么是OOM?什么是栈溢出(StackOverFlowError)?怎么分析JVM的常用调优参数?内存快照如何抓取?怎么分析Dump文件?谈谈JVM中类加载器你的认识?JVM的位置JVM的体系结构类加载器双…

科研热点|科研人专属身份证来了,国产ORCID ID启动!

2023年6月1日&#xff0c;国家自然科学基金委员会发布了《国家自然科学基金委员会关于推广和发布基础研究科研人员标识&#xff08;BRID&#xff09;有关工作安排的通告》&#xff0c;宣布从即日起&#xff0c;国家自然科学基金委员会&#xff08;以下简称自然科学基金委&#…

高完整性系统(4)Formal Logic (形式逻辑和 Alloy 简介)

文章目录 Story so far形式逻辑命题 proposition谓词 predicate连接词VariablesSet 集合Set operation 集合操作Set Relationship 集合关系Alloy Set alloy 的集合表示Quantification 量词Relations 关系案例Binary Relations 二元关系图Functions 函数Total v.s. Partial Func…

IO模型、select、poll、epoll

阻塞IO模型 阻塞IO是最通用的IO类型&#xff0c;使用这种模型进行数据接收的时候&#xff0c;在数据没有到之前程序会一直等待。例如&#xff0c;对于函数recvfrom(),内核会一直阻塞该请求直到有数据到来才返回。 非阻塞IO模型 当把套接字设置成非阻塞的IO,则对每次请求&…

Java网络开发(Tomcat)——遇到的 bug 汇总(持续更新)

目录 引出:bug::bug::bug:Tomcat开发的bug汇总项目启动就报错1.WebServlet()路径配置的问题2.由于之前的错误&#xff0c;Context[/day01]启动失败【困扰】3.启动过滤器异常---init方法 JSP使用相关报错1.后端传给jsp的数据&#xff0c;前端jsp不显示2.jsp的包没有导&#xff0…

6 vue

前端开发 1.前端开发 前端工程师“Front-End-Developer”源自于美国。大约从2005年开始正式的前端工程师角色被行业所认可&#xff0c;到了2010年&#xff0c;互联网开始全面进入移动时代&#xff0c;前端开发的工作越来越重要。 最初所有的开发工作都是由后端工程师完成的&…

‘jupyter‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

目录 0.问题背景环境介绍 1.解决步骤 2.测试步骤 0.问题背景环境介绍 1&#xff09;环境&#xff1a;windows64 2&#xff09;问题背景&#xff1a;在搭建jupyter notebook的过程中&#xff0c;想用windows的任务管理器启动jupyter notebook或者使用【jupyter notebook --…

降低成本,快速搭建企业帮助文档的方法盘点

企业帮助文档是企业为了解决客户疑问和提高客户满意度而制作的一种文档&#xff0c;通常包括产品的使用指南、故障排除、常见问题解答等内容。一个好的帮助文档可以帮助企业降低客服成本、提高客户满意度&#xff0c;进而提高产品销量和企业品牌形象。但是&#xff0c;有些企业…

基于html+css的图展示108

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

MFC(十二)多个对话框

我们来制定多个对话框&#xff0c;每个对话框都有不同的功能&#xff0c;单击下一步&#xff0c;即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图&#xff0c;Dialog里面&#xff0c;右键-->添加资源---->dialog>选择IDD PROPPAGE_SMALL新建 属性页&#…

「移动机器人行业应用分析」锂电行业

锂电池作为目前一种比较成熟和先进的电池&#xff0c;因其质量轻&#xff0c;储电量大等特点&#xff0c;受到了人们的广泛应用。中国作为全球最大的锂电生产和消费国&#xff0c;也是全球最大的电动汽车市场&#xff0c;随着“碳中和”这一目标的提出&#xff0c;锂离子电池技…

陶瓷板检测系统在工业质检领域的前景

陶瓷是一种重要的工业材料&#xff0c;广泛应用于建筑、电子、航空航天、医疗等领域。在生产过程中&#xff0c;陶瓷制品需要经过多道工序&#xff0c;其中检测环节是非常重要的一环。传统的陶瓷板检测方式主要依赖人工目视检测&#xff0c;效率低下且容易出错。随着人工智能技…

5年Java经验字节社招:15天3次面试,成功拿下Offer

背景经历 当时我工作近5年&#xff0c;明显感觉到了瓶颈期。具体来说&#xff0c;感觉自己用过很多框架、做过一些技术设计、也有过一些产出&#xff0c;但是从技术深度上感觉不足&#xff0c;到后期时做事也没有明显挑战&#xff0c;完全适应了公司节奏&#xff0c;说句不好听…