描述
设计一种方法,通过给重复字符计数来进行基本的字符串压缩。
例如,字符串 aabcccccaaa
可压缩为 a2b1c5a3
。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。
可以假设字符串仅包括a-z的字母。
样例
str=aabcccccaaa
返回 a2b1c5a3
str=aabbcc
返回 aabbcc
str=aaaa
返回 a4
1 <?php 2 /** 3 * 字符串压缩 4 * 循环字符串,然后找到每个字符有多少个重复的 5 * 把原字符和重复数拼接到一个新的字符串中 6 */ 7 function solution($str) 8 { 9 $len = strlen($str); 10 $ret = ''; 11 $j = 0; 12 for($i=0; $i<$len;$i=$j) 13 { 14 while($j < $len && $str[$i] == $str[$j]) 15 { 16 ++$j; 17 } 18 $ret .= $str[$i]; 19 $ret .= $j - $i; 20 } 21 return strlen($ret)<$len ? $ret : $str; 22 } 23 24 $str = 'aabcccccaaa'; 25 echo solution($str) . "<br/>"; 26 $str = 'aabbcc'; 27 echo solution($str) . "<br/>"; 28 $str = 'aaaa'; 29 echo solution($str) . "<br/>";