-4

说明:你要编写一个简单的文本压缩和解压缩算法,称为 Compress,它使用重复字符的计数来压缩和恢复将文本压缩到原始文本。数据将从文件而不是键盘读取。

输入:aaaaaaaaaaaaaaaaaaAabc 输出:a19A1a1b1c1

在您的程序中,您必须具有以下这两种方法。然后你在你的 main 方法中调用这两个方法来压缩和解压你的输入文本。

公共静态字符串 CompressStr(字符串输入,布尔 debug_sw)

公共静态 String DecompressStr(String input, Boolean debug_sw)

4

2 回答 2

1

这就是运行长度编码算法:http ://en.wikipedia.org/wiki/Run-length_encoding

  Loop: count = 0
        REPEAT
          get next symbol
          count = count + 1
        UNTIL (symbol unequal to next one)
                output symbol
        IF count > 1
          output count
        GOTO Loop

一些Python代码:

# http://acm.zhihua-lai.com

def runlen(s):
    r = ""
    l = len(s)
    if l == 0:
        return ""
    if l == 1:
        return s + "1"
    last = s[0]
    cnt = 1
    i = 1
    while i < l:
        if s[i] == s[i - 1]: # check it is the same letter
            cnt += 1
        else:
            r = r + s[i - 1] + str(cnt) # if not, store the previous data
            cnt = 1
        i += 1
    r = r + s[i - 1] + str(cnt)
    return r

if __name__ == "__main__":
    print runlen("aaabbccccddddd")
    print runlen("a")
    print runlen("")
    print runlen("abcdefg")
    print runlen("eeeeeaaaff")
于 2012-11-10T19:55:39.280 回答
-1

Java 在标准 API 中有用于此的类:Zip/GZipInputStream 和 Zip/GZipOutputStream。如果您需要压缩数据,请使用它们而不是自己滚动。如果您将此作为学习练习,则最好尝试阅读 Zip 的算法。

于 2012-11-10T19:55:02.700 回答