【编程题目 |100分】一种字符串压缩表示的解压【2021 H2, 2022 Q1考试题】


时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并调试“按钮进行代码提交。


题目描述

【一种字符串压缩表示的解压】

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

输入描述

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

输出描述

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

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

4dff

输出

ddddff

说明

4d扩展为dddd,故解压后的字符串为ddddff。

示例2 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

2dff

输出

!error

说明

两个d不需要压缩,故输入不合法。

示例3 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

4d@A

输出

!error

说明

全部由小写英文字母组成的字符串压缩后不会出现特殊字符@和大写字母A,故输入不合法。


JAVA解法一


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str, tmp, res;
        char ch;
        int count;
        while (scanner.hasNext()) {
            str = scanner.next();
            res = "";

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:10金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA解法二


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        StringBuilder res = new StringBuilder();

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:10金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


Python解法一


import re

s = input()

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:10金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python解法二


def getUnZipStr(zipStr):
    if not zipStr:
        return None

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:10金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看


JavaScript


let str = readLine(); 

let res = "";

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:10金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看