规范:您将编写一个名为Compress的简单文本压缩和解压缩算法,该算法使用重复字符的计数来压缩和恢复将文本压缩为原始文本。数据将从不是键盘的文件中读入。
输入:aaaaaaaaaaaaaaaaaaaAabc 输出:a19A1a1b1c1
在您的计划中,您必须拥有以下两种方法。然后在main方法中调用这两个方法来压缩和解压缩输入文本。
Public static String CompressStr(String input,Boolean debug_sw)
Public static String DecompressStr(String input,Boolean debug_sw)
答案 0 :(得分: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")
答案 1 :(得分:-1)
Java在标准API中有这样的类:Zip / GZipInputStream和Zip / GZipOutputStream。如果您需要压缩数据,请使用这些数据而不是滚动数据。如果您将此作为学习练习,那么最好尝试阅读Zip的算法。