题目描述
有一种简易压缩算法:针对全部为小写英文字母组成的字符串, 将其中连续超过两个相同字母的部分压缩为连续个数加该字母 其他部分保持原样不变.
例如字符串aaabbccccd 经过压缩变成字符串 3abb4cd
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串
- 若输入合法则输出解压缩后的字符串
- 否则输出字符串
!error
来报告错误
输入描述
输入一行,为一个 ASCII 字符串
长度不超过100
字符
用例保证输出的字符串长度也不会超过100
字符串
输出描述
若判断输入为合法的经过压缩后的字符串
则输出压缩前的字符串
若输入不合法 则输出字符串!error
示例1
输入
4dff
输出
ddddff
说明
4d 扩展为 4 个 d ,故解压后的字符串为 ddddff
示例2
输入
2dff
输出
!error
说明
2 个 d 不需要压缩 故输入不合法
示例3
输入
4d@A
输出
!error
说明
全部由小写英文字母做成的字符串,压缩后不会出现特殊字符@和大写字母 A
故输入不合法
解题思路
题目要求我们编写一个函数来判断一个字符串是否是经过合法压缩后的字符串,并且能够解压缩这个字符串。如果字符串不合法,则返回!error
。
压缩规则总结:
- 连续超过两个相同的字母,将它们压缩为
数字 + 字母
的形式。例如,aaa
压缩为3a
,cccc
压缩为4c
。 - 字符串中的其他部分保持原样。
合法性检查:
- 字符串中只允许包含小写字母和数字,不允许出现其他字符。
- 数字必须大于2,因为两个或更少个相同字母不应该压缩。
- 数字后面必须跟随一个小写字母,且该数字应扩展为对应数量的字母。
示例分析:
- 输入
4dff
:4d
扩展为dddd
,合法字符串,输出为ddddff
。 - 输入
2dff
:数字2
不应出现,因为两个字母不需要压缩,输入不合法,输出!error
。 - 输入
4d@A
:包含非法字符@
和大写字母A
,输入不合法,输出!error
。
Java
import