我有非常长的整数序列,看起来像这样(长度任意!):
0000000001110002220033333
现在我需要一些算法将这个字符串转换成类似于压缩的东西。
a9b3a3c3a2d5
这段文本的含义是:“重复9次a,然后重复3次b,接着重复3次a”,以此类推。其中,“a”代表0,“b”代表1,“c”代表2,“d”代表3。
您要如何实现这个过程呢?目前我没有想到合适的方法,而且我在谷歌上也没有找到相关信息,因为我不知道该搜索什么。这种编码/压缩方式叫什么?
附注:我将使用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');
};