【发布时间】:2011-02-03 17:41:44
【问题描述】:
我有很长的整数序列,看起来像这样(任意长度!):
0000000001110002220033333
现在我需要一些算法将这个字符串转换成压缩的东西,比如
a9b3a3c3a2d5
表示“a 9 次,b 3 次,a 3 次”等等,其中“a”代表 0,“b”代表 1,“c”代表 2,“d”代表 3。
你会怎么做? 到目前为止,我没有想到任何合适的东西,而且我在谷歌上没有运气,因为我真的不知道要搜索什么。这种编码/压缩叫什么?
PS:我将使用 PHP 进行编码,并使用 JavaScript 进行解码。
编辑:谢谢大家!
我最终得到了这个用于编码的函数:
protected function numStringToRle($s){
$rle = '';
$count = 1;
$len = strlen($s);
for($i = 0; $i < $len; $i++){
if($i != $len && isset($s[$i+1]) && $s[$i] == $s[$i+1]){
$count++;
} else {
$rle .= chr($s[$i] + 97).( $count == 1 ? '' : $count);
$count = 1;
}
}
return $rle;
}
还有用于解码的:
var decodeCoords = function(str) {
str = str.replace(/(.)(\d+)/g, function(_, x, n) {
return new Array(parseInt(n, 10) + 1).join(x);
});
return str.
replace(/a/g, '0').
replace(/b/g, '1').
replace(/c/g, '2').
replace(/d/g, '3');
};
【问题讨论】:
-
你到底在用这个做什么?你确定你不能只使用 Gzip 压缩它吗? stackoverflow.com/questions/294297/… 这样在时间和空间上都会更有效率,而且已经为你做好了。
-
gzip 不是一个选项,因为我需要使用 javascript 对其进行解码。我将它用作 2d 游戏的一种位掩码。
标签: php javascript sequence encode compression