[英]Python Compression Run Length encoding
我正在尝试了解运行长度编码,我在网上发现了这个我无法做到的挑战。 它要求你编写一个名为compression(strg)的压缩函数,它将长度为64的二进制字符串strg作为输入,并返回另一个二进制字符串作为输出。 输出二进制字符串应该是输入字符串的行程编码。
压缩( '1010101001010101101010100101010110101010010101011010101001010101')
'1010101001010101 * 4'
这是我的,但这没有找到模式:
from itertools import *
def compression(strg):
return [(len(list(group)),name) for name, group in groupby(strg)]
我需要一些帮助解决这个问题。
这是最长的重复子字符串问题的示例。 它通常用后缀树数据结构来解决。
对于短字符串,您可以使用正则表达式的形式:
import re
s1='1010101001010101101010100101010110101010010101011010101001010101'
i=2
l=s1
j=len(l)/2
while i<len(s1):
m=re.search('^(.{'+str(j)+'})\\1$',l)
if m:
l=m.group(1)
i,j=i+1,len(l)/2
continue
else:
print '{0} * {1} = {2}'.format(l,i,s1)
break
打印输出。 请注意,这仅适用于从中间完全对称的字符串 - 此类问题的一小部分。 要压缩其他类型的字符串,您需要一个代表语法,说明如何替换被替换的元素。
以下链接给出了具有详细说明的这个问题的答案:
希望它能清除您对字符串和二进制压缩的行程编码的理解。 无需使用任何re和itertools即可完成此编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.