其他分享
首页 > 其他分享> > ECNU 3135 数据压缩

ECNU 3135 数据压缩

作者:互联网

ECNU 3135 数据压缩

链接

https://acm.ecnu.edu.cn/problem/3135

题目

单点时限: 2.0 sec

内存限制: 256 MB

RLE (Run Length Encoding)算法是一个简单高效的无损数据压缩算法。

算法的基本思路 :

(1)、把数据看成一个线性序列;

(2)、用一个字节表示数据重复的次数,然后在这个字节后面存储对应的数据。

例如,数据序列 AAAAABBCD,采用 RLE 算法压缩为:5A2B1C1D。

(3)、由于只采用一个字节存储数据重复次数,其最大值为 255;因此对于数据序列的某一个数据重复次数大于 255 时,则当计数到 255 时就必须强制将计数值和当前数据值写入,然后再重新开始计数。

例如,数据序列:

采用 RLE 算法压缩为:255A7A5B2C1D1E3P

输入格式
第 1 行:一个整数 () 为问题数。

接下来 T 行,每行输入一段文本数据,文本长度不超过 500 个字符。

文本由可打印字符组成。

输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等)。然后对应每个问题 , 在一行中输出压缩后的结果。

样例
input
3
AAAAABBCD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBCCDEPPP
fggggdfeir9999000;;dqqqq234ererrrrrrrrrrrrvvvvvvz
output
case #0:
5A2B1C1D
case #1:
255A7A5B2C1D1E3P
case #2:
1f4g1d1f1e1i1r49302;1d4q1213141e1r1e12r6v1z

思路

问题不是很难,记录一个字符连续出现的次数,不同时输出,唯一需要考虑到的是连续255个字符,就要归零,这和最后直接输出不同,需要额外增加一个flag。

代码

  public static void fun() {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    for (int i = 0; i < n; i++) {

      String line = sc.next();
      StringBuffer sb = new StringBuffer(line);
      System.out.println("case #" + i + ":");
      int count = 1;
      int flag = 0;
      char temp = sb.charAt(0);
      for (int j = 1; j < sb.length(); j++) {
        if (sb.charAt(j) == temp) {
          count++;
          if (count == 255) {
            System.out.print(count + "" + temp);
            if (j + 1 < sb.length()) {
              temp = sb.charAt(j + 1);
              count = 1;
              j++;
            } else {
              flag = 1;
            }
          }
        } else {
          System.out.print(count + "" + temp);
          count = 1;
          temp = sb.charAt(j);
        }
      }
      if (count > 0 && flag == 0) {
        System.out.println(count + "" + temp);
      } else {
        System.out.println();
      }
    }

  }

标签:count,temp,System,ECNU,3135,sb,255,数据压缩,out
来源: https://www.cnblogs.com/blogxjc/p/14382821.html