我有这个样子很长整型序列的序列(任意长度!):编码/压缩重复整数
0000000001110002220033333
现在我需要一些算法,这个字符串转换成一些压缩像
a9b3a3c3a2d5
这意味着“a 9次,然后b 3次,然后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压缩它吗? HTTP://计算器。com/questions/294297/javascript-implementation-of-gzip 这将会更加有效的时间和空间明智的,它已经为你完成。 – ryeguy 2010-04-02 13:20:56
gzip不是一个选项,因为我需要用javascript解码。我使用它作为2D游戏的一种掩码。 – Alex 2010-04-02 13:27:46