华为OD机试之一种字符串压缩表示的解压(Java源码)
一种字符串压缩表示的解压
题目描述
有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。
例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串,
若输入合法则输出解压缩后的字符串,否则输出字符串“!error” 来报告错误
输入描述
输入一行,为一个ASCII字符串,长度不会超过100字符,用例保证输出的字符串长度也不会超过100字符。
输出描述
若判断输入为合法的经过压缩后的字符串,则输出压缩前的字符串;若输入不合法,则输出字符串“
| 输入 | 输出 | 说明 |
|---|---|---|
| 4dff | ddddff | 4d扩展为dddd,故解压后的字符串为ddddff。 |
| 2dff | !error | 两个d不需要压缩,故输入不合法。 |
| 4d@A | !error | 全部由小写英文字母组成的字符串压缩后不会出现特殊字符@和大写字母A,故输入不合法。 |
源码和解析
解析:
按照题意可知:
1.合法的压缩字串只应包含数字和小写字母 包含其他字符则为不合法的,且数字必须大于2,否则也是不合法的。例如dd压缩为2d 其字符数并未减少,达不到压缩的效果。数字后必须出现字符,否则也是不合法的数据。最后一位是数字也不行
2.解决这个题,首先得判读是否合法,若合法,则再进行还原
3.还原时遇见数字n,则可以使用循环,来产生n个数字后出现的字符。
import java.util.ArrayList;public class T7 {public static void main(String[] args) {String input = "4dff";if (!check(input)) {System.out.println("!error");System.exit(0);}char chArr[] = input.toCharArray();// 重组字符 a15dff3d=> [1,15,d,f,f,3,d]ArrayList<String> chList = new ArrayList<>();String item = "";boolean isNumber = false;StringBuilder result = new StringBuilder();for (char c : chArr) {if (isNumberic(c)) {// 当前是数字if (isNumber) {// 前一个字符也是数字item += c;} else {// 前一个字符不是数字item = c + "";isNumber = true;}} else {// 是字符if (isNumber) {// 前面的是数字chList.add(item);item = "";isNumber = false;}chList.add(c + "");}}boolean flag = false;// 前一位是否是数字for (int j = 0; j < chList.size(); j++) {String n = chList.get(j);if (n.length() == 1) {// 单字符 可能是数字 也可能是字母if (isNumberic(n.charAt(0))) {// 是数字int len = Integer.parseInt(n);if (len <= 2) {System.out.println("!error");System.exit(0);}for (int i = 0; i < len; i++) {result.append(chList.get(j + 1));}flag = true;} else {// 是字符if (flag == false) {// 前一位是字符 直接拼接result.append(n);}flag = false;}} else {// 肯定是数字int len = Integer.parseInt(n);flag = true;for (int i = 0; i < len; i++) {result.append(chList.get(j + 1));}}}// System.out.println(chList);System.out.println(result);}// 判断单字符是否是数字static boolean isNumberic(char c) {int chr = c;// 转为ASCII码来判断 48位0if (chr >= 48 && chr <= 57) { // (int)'0' ==>48return true;}return false;}// 检查只包含数字和小写字母(未来过滤2及以下数字)static boolean check(String param) {char chArr[] = param.toCharArray();// 最后一位是数字也不行if (isNumberic(chArr[chArr.length - 1])) {return false;}boolean flag = true;for (char c : chArr) {if (c >= 'a' && c <= 'z') {continue;}int chr = c;// 转为ASCII码来判断 48位0if (chr >= 48 && chr <= 57) { // (int)'0' ==>48continue;}flag = false;break;}return flag;}
}
相关文章:
华为OD机试之一种字符串压缩表示的解压(Java源码)
一种字符串压缩表示的解压 题目描述 有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。 例如:字符串“aaabbccccd”经过压缩成为字符串“…...
Microsoft Project Online部署方案
目录 一、前言 二、Microsoft Project Online简介 三、Microsoft Project Online的优势 1、云端部署 2、多设备支持...
飞浆AI studio人工智能课程学习(3)-在具体场景下优化Prompt
文章目录 在具体场景下优化Prompt营销场景办公效率场景日常生活场景海报背景图生成办公效率场景预设Prompt 生活场景中日常学习Prompt: 给写完的代码做文档 将优质Prompt模板化Prompt 1:Prompt 1:Prompt 2步骤文本过长而导致遗失信息的示例修改后 特殊示例 如何提升安全性主要目…...
企业工程行业管理系统源码-专业的工程管理软件-提供一站式服务
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…...
Ehcache 整合Spring 使用页面、对象缓存
Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支…...
Spring Cloud中的服务路由与负载均衡
Spring Cloud中的服务路由与负载均衡 一、服务路由1. 服务发现2. 服务注册3. 服务消费4. 服务提供5. 服务路由实现 二、负载均衡1. 负载均衡的概念2. 负载均衡算法3. 负载均衡实现4. 负载均衡策略5. 使用Spring Cloud实现负载均衡 三、服务路由与负载均衡的集成1. 集成背景2. 集…...
rails routes的使用
Rails routes 是用于确定应该将请求发送到哪个控制器和操作的一种机制。在 Rails 应用程序中,可以通过定义路由来映射 URL 到控制器操作。可以使用 rails routes 命令查看当前应用程序中定义的所有路由。 以下是一些常见的用法: 查看所有路由ÿ…...
Linux基础内容(21)—— 进程消息队列和信号量
Linux基础内容(20)—— 共享内存_哈里沃克的博客-CSDN博客 目录 1.消息队列 1.定义 2.操作 2.信号量 1.定义 2.细节 3.延申 4.操作 3.IPC的特点共性 1.消息队列 1.定义 定义:是操作系统提供的内核级队列 2.操作 msgget:…...
STM32实现基于RS485的简单的Modbus协议
背景 我这里用STM32实现,其实可以搬移到其他MCU,之前有项目使用STM32实现Modbus协议 这个场景比较正常,很多时候都能碰到 这里主要是Modbus和变频器通信 最常见的是使用Modbus实现传感器数据的采集,我记得之前用过一些传感器都…...
springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...
zabbix监控之javasnmp自定义监控
1、客户端开启 java jmxremote 远程监控功能 上传 tomcat 软件包到 /opt 目录中 cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat #配置 java jmxremote 远程监控功能 vim /usr/local/tomcat/bin/catalina.sh ...... #位置在 cygw…...
Inertial Explorer处理pospac数据总结
Inertial Explorer处理pospac数据的过程包括:1)从pospac提取出gps数据和imu数据;2)gps数据转成rinex格式;3)imu数据转成imr格式;4)IE对gps数据进行PPP解算;5)紧耦合融合解…...
tps和qps的区别是什么?怎么理解
区别:QPS指的是“每秒查询率”;而TPS指的是“事务数/秒”。理解:Tps即每秒处理事务数,对于一个页面的一次访问,形成一个Tps;而一次页面请求,可能产生多次对服务器的请求,服务器对这些…...
【Java系列】深入解析枚举类型
序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题&a…...
网络原理(五):IP 协议
目录 认识IP 地址 子网掩码 作用 动态分配IP 地址 NAT 机制 认识MAC地址 MAC地址如何工作 网络设备和相关技术 集线器:转发所有端口 交换机:MAC地址转换表转发 主机&路由器:ARP缓存表ARP寻址 路由器:路由NAPT 数…...
MySQL---空间索引、验证索引、索引特点、索引原理
1. 空间索引 MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是: 类型 含义 说明 Geometry 空间数据 任何一种空间类型 Poi…...
选择合适的 MQTT 云服务:一文了解 EMQX Cloud Serverless、Dedicated 与 BYOC 版本
引言 EMQX Cloud 是基于 EMQX Enterprise 构建的一款全托管云原生 MQTT 消息服务。为了满足不同客户的需求,EMQX Cloud 提供了三种版本供客户选择:Serverless 版、专有版和 BYOC 版。 本文将简要介绍这三个版本的核心区别,并通过三个用户故…...
uvc驱动ioctl分析下
uvc驱动ioctl分析下 文章目录 uvc驱动ioctl分析下uvc_ioctl_enum_input枚举输入uvc_query_ctrl__uvc_query_ctrluvc_ioctl_g_input 获取输入uvc_ioctl_s_input 设置输入uvc_query_v4l2_ctrluvc_ioctl_queryctrl查询控制器uvc_ioctl_query_ext_ctrl查询扩展控制器 uvc_ioctl_g_c…...
数据库可视化神器,你在用哪一款呢
唠嗑部分 在我们日常开发中,作为开发者,与数据库是肯定要打交道的,比如MySQL,Oracle、sqlserver… 那么数据库可视化工具,你用什么呢?小白今天将常用地几款工具列一下,各位小伙伴如有喜欢的自…...
CMD与DOS脚本编程【第三章】
预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数,如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…...
网络信息安全技术术语对照表
类别术语中文术语英文术语说明基础技术类加密encryption将明文数据通过特定算法和密钥转换为密文数据的过程,目的是确保数据在存储、传输过程中不被未授权方获取和理解。基础技术类解密decryption将加密后的密文数据,通过对应的算法和密钥还原为原始明文…...
Python AOT编译性能翻倍的5个隐藏开关:LLVM 18.1 + PGO + LTO实战配置,错过再等三年
第一章:Python 原生 AOT 编译方案 2026 性能调优指南随着 CPython 3.14 对原生 AOT(Ahead-of-Time)编译的正式支持落地,2026 年 Python 生态已进入“可编译、可嵌入、可确定性部署”的新阶段。本章聚焦于基于 cpython-aot 工具链与…...
农旅电商运营必备:初级认证考试中的5大高频考点与避坑指南
农旅电商运营必备:初级认证考试中的5大高频考点与避坑指南 农旅电商作为乡村振兴战略下的新兴业态,正在经历从粗放式增长到精细化运营的关键转型期。对于准备参加初级认证考试的从业者而言,系统掌握核心运营逻辑远比死记硬背更重要。根据近三…...
深入解析MyBatis查询异常:org.apache.ibatis.exceptions.PersistenceException的排查与修复
1. 初识PersistenceException:MyBatis的"红色警报" 当你看到控制台突然抛出org.apache.ibatis.exceptions.PersistenceException时,就像开车时仪表盘突然亮起故障灯。这个异常是MyBatis框架的通用异常包装器,专门用来封装数据库操作…...
从零到精通:MySQL多平台安装全攻略
1. MySQL安装前的准备工作 第一次接触MySQL安装的朋友可能会被各种术语吓到,但其实只要掌握几个核心概念,后面的操作就会顺利很多。我刚开始接触数据库时也走过不少弯路,今天就把这些经验总结成小白也能看懂的操作指南。 MySQL本质上就是一个…...
利用快马平台快速搭建stm32f103c8t6最小系统板LED闪烁原型
最近在做一个嵌入式小项目,用到了经典的stm32f103c8t6最小系统板。作为嵌入式开发新手,最头疼的就是搭建开发环境和写各种初始化代码。不过这次尝试用InsCode(快马)平台后,整个过程顺畅多了,分享下我的经验。 项目背景 stm32f103c…...
Cosmos-Reason1-7B在计算机组成原理教学中的应用:图解CPU工作流程
Cosmos-Reason1-7B在计算机组成原理教学中的应用:图解CPU工作流程 计算机组成原理这门课,对很多学生来说,就像在学一门“黑魔法”。课本上那些抽象的指令周期、数据通路、控制器,听起来都懂,但一合上书,脑…...
新手入门:利用快马平台快速理解与模拟openclaw重启命令执行
今天想和大家分享一个特别适合机器人编程新手的实践项目——如何在安全可控的环境下理解和模拟openclaw机械爪的重启命令。这个过程中我发现了InsCode(快马)平台这个神器,它让整个学习过程变得异常简单。 为什么需要专门学习重启命令? 机械爪作为机器人常…...
蓝桥杯单片机第12届省赛2满分(西风)
1注意S7长短按键冲突问题if(key_down7)//判断是否按下{fs71;//开始计时t1000ms_10;}if(key_up7)//判断是否抬起{if(t1000ms_1>1000)//长按键{fled^1;}else//短按键{f_baofreq;}t1000ms_10;fs70;//停止计时}2获取频率void Timer0_Init(void) //100微秒12.000MHz {AUXR &…...
3分钟搞定Axure RP中文界面:告别英文困扰,专注原型设计
3分钟搞定Axure RP中文界面:告别英文困扰,专注原型设计 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还…...
