【四脚猫】每日一题(11月13日):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序, 将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: (1)仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字
【四脚猫】每日一题(11月13日):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,
将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
(1) 仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压缩后的字符串还是”abcbc”。
(2) 压缩字段的格式为”字符+字符重复的次数”。例如:字符串”xxxyyyyyyz”压缩后就成为”x3y6z” 。
(3) 单个字符不用压缩。例如 “abc” ,压缩后还是“abc” 。
<?php
/**
* 字符串,重复值压缩
* @param string $str 字符串
* @param string $code_type encode|decode
* @return string|mixed
*/
function str_compress($str, $code_type='encode') {
$code_type = strtolower(trim($code_type));
if ('encode' == $code_type || $code_type) {
$res = preg_replace_callback('#(.)(\1+)#is', function($match){
return $match [1] . '[' . strlen($match[0]) . ']';
}, $str);
} else {
$res = preg_replace_callback('#(.)\[(\d+)\]#is', function($match){
return str_repeat($match [1], $match [2]);
}, $str);
}
return $res;
}
// 测试 -----------------
$old_str = $str = 'aavaabbcce';
echo $old_str;
echo "<hr />";
$str = str_compress($str);
echo $str;
echo "<hr />";
$str = str_compress($str, 0);
echo $str;
echo "<hr />";
if ($str == $old_str) {
echo 1;
} else {
echo 0;
}









