• PAT(B) 1078 字符串压缩与解压(Java)


    题目链接:1078 字符串压缩与解压 (20 point(s))

    题目描述

    文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。

    解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。

    本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

    输入格式

    输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩;如果是 D 就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过 1000 个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。

    输出格式

    根据要求压缩或解压字符串,并在一行中输出结果。

    输入样例 1

    C
    TTTTThhiiiis isssss a   tesssst CAaaa as
    

    输出样例 1

    5T2h4is i5s a3 te4st CA3a as
    

    输入样例 2

    D
    5T2h4is i5s a3 te4st CA3a as10Z
    

    输出样例 2

    TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZZZZ
    

    Java代码

    /**********************************************************************************
    Submit Time			Status		Score	Problem	Compiler		Run Time	User
    8/20/2019, 17:32:07	Accepted	20		1078	Java (openjdk)	239 ms		wowpH
    **********************************************************************************/
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class Main {
    	public static void main(String[] args) throws Exception {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		String operation = br.readLine();							// 操作类型
    		char[] arr = br.readLine().toCharArray();					// 字符串
    		if ('C' == operation.charAt(0)) {							// 压缩
    			for (int i = 0, j = i + 1; i < arr.length; i = j) {		// 遍历字符串
    				for (; j < arr.length && arr[j] == arr[i]; ++j) {
    				}											// 统计第i个字符的个数
    				if (j - i > 1) {									// 1个以上
    					System.out.print(j - i);						// 输出字符个数
    				}
    				System.out.print(arr[i]);							// 输出字符
    			}
    		} else if ('D' == operation.charAt(0)) {					// 解压
    			for (int i = 0; i < arr.length; ++i) {					// 遍历字符串
    				int number = 0;										// 个数
    				while (arr[i] >= '0' && arr[i] <= '9') {			// 是数字
    					number = number * 10 + arr[i++] - 48;	// 个数增加,下标后移
    				}
    				for (int j = 1; j < number; ++j) {
    					System.out.print(arr[i]);						// 输出重复字符
    				}
    				System.out.print(arr[i]);							// 输出字符
    			}
    		}
    	}
    }
    

    提交结果

    提交结果

  • 相关阅读:
    c++经典书籍介绍
    jpeg软解码实现介绍
    视频编解码类型调查——抖音客户端
    微机接口复习
    更改MySQL数据库的密码
    python学习之创建我的第一个Django项目
    关于 V831 linux 调用 gpio 的一些通用操作。
    SpringBoot整合H2内存数据库快速启动测试
    MybatisPlus的各种功能使用笔记综合!
    MybatisPlus的自动填充功能使用!
  • 原文地址:https://www.cnblogs.com/wowpH/p/11687421.html
Copyright © 2020-2023  润新知