PHP
<?php
/*
input:aaabbcccaab
output:3a2b3c2a1b
*/
$str='aaabbcccaab';
function char_count($str){ //最简洁的算法
$newstr='';
$n=1;
for($i=0;$i<strlen($str);$i++){
if($i+1<strlen($str)){
if($str[$i]==$str[$i+1]){
$n++;
}
else{
$newstr .= $n.$str[$i];
$n=1;
}
}
else{
$newstr .= $n.$str[$i];
}
}
return $newstr;
}
function char_count_3($str){ //更简洁的算法
$str_len=strlen($str);
if(!$str_len){
return '';
}
//第一个单独处理,倒数第二个存储连续字符个数,
//倒数第一个存储单个连续字符
$ret_arr = [1, $str[0]];
//从第二个开始,跟前一个进行比较
for ($i = 1; $i < $str_len; ++$i) {
//相同,只计数
if ($str[$i] == $str[$i - 1]) {
$ret_arr[count($ret_arr) - 2]++;
}
//不相同,插入默认个数1和当前字符
else {
$ret_arr[] = 1;
$ret_arr[] = $str[$i];
}
}
return implode('', $ret_arr);
}
function char_count_2($str){ //使用两个数组分别存放字符和连续字符个数
$str_len=strlen($str);
if(!$str_len){
return '';
}
$counter=0; //计算不同连续字符的个数
$char_arr[0]=$str[0]; //默认第一个字符,即第一个单独处理
$count_arr[0]=1; //默认第一个字符个数为1
for($i=1;$i<$str_len;$i++){
if($str[$i]==$str[$i-1]){ //当前字符与前一个相同
$count_arr[$counter]++;
}
else{
$counter++;
$char_arr[$counter]=$str[$i];
$count_arr[$counter]=1;
}
}
$ret_str='';
$arrs_len=count($char_arr);
for($i=0;$i<$arrs_len;$i++){ //拼接字符和连续字符个数
$ret_str .= $count_arr[$i].$char_arr[$i];
}
return $ret_str;
}
function char_count_1($str){ //直接遍历字符串
if($str==''){
return '';
}
$str_len=strlen($str);
$counter=1;
$ret_str='';
for($i=0;$i<$str_len-1;$i++){ //时间复杂度为n
if($str[$i]==$str[$i+1]){ //后一个与当前字符相同,只计数
$counter++;
}
else{ //后一个与当前字符不相同,拼接字符串并充值计数器
$ret_str .= $counter.$str[$i];
$counter=1;
}
if($i==$str_len-2){ //比较结束,最后一个单独处理
$ret_str .= $counter.$str[$i+1];
}
}
return $ret_str;
}
echo char_count($str);
Javascript
<script>
function char_count(str) {
var tmp_str;
if(str.length>0){
tmp_str=1+str[0];
}
for(var i=1;i<str.length;i++){
if(str[i]==tmp_str[tmp_str.length-1]){
// console.log(tmp_str.substr(0,tmp_str.length-2), (1+parseInt(tmp_str[tmp_str.length-2])), tmp_str[tmp_str.length-1]);
tmp_str=tmp_str.substr(0,tmp_str.length-2)+ (1+parseInt(tmp_str[tmp_str.length-2])) +tmp_str[tmp_str.length-1];
// console.log(tmp_str);
}
else{
tmp_str+=1+str[i];
}
}
return tmp_str;
}
console.log(char_count('aabcccbaab')); //2a1b3c1b2a1b
</script>