zoukankan      html  css  js  c++  java
  • 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]);							// 输出字符
    			}
    		}
    	}
    }
    

    提交结果

    提交结果

  • 相关阅读:
    mybatis
    Spring原理
    JS 之继承
    HTTP协议简介2
    JS 之原型,实例,构造函数之间的关系
    HTTP协议简介1
    freemarker语法简介
    CSS 动画之十-图片+图片信息展示
    JS实现颜色值的转换
    抓包工具charles的使用
  • 原文地址:https://www.cnblogs.com/wowpH/p/11687421.html
Copyright © 2011-2022 走看看