用php找出字符串中连续重复次数最多的字符,你有方法吗?

找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。

方法一

<?php 
$arr = str_split($str);
//字符串分隔到数组中

$arr = array_count_values($arr);
//用于统计数组中所有值出现的次数,返回一个数组

//键名为原数组的键值,键值为出数
arsort($arr);//按键值倒序
echo "";
print_r($arr);

方法二:

<?php 
$arr = str_split($str);
$con = array();

foreach ($arr as $v){

   if(!@$con[$v]){
      $con[$v]=1;
   }else{undefined

      $con[$v]++;
   }

}

arsort($con);
print_r($con);

方法三

<?php 
$arr = str_split($str);

$unique = array_unique($arr);
//移除数组中重复的值,并返回结果数组(键名不变);
print_r($unique);

foreach($unique as $v){undefined
   $arr2[$v] = substr_count($str,$v);
   //substr_count():计算某字符在字符串中出现的次数
}

arsort($arr2);
print_r($arr2);

》》》程序员福利《《《

例子:

PHP面试过程中经常遇到这类算法题目:

<?php 
//找出字符串中连续重复次数最多字
$str = 'bbcccychrisQxnnddemdereeeeeffetcsssssssssssssfggdddreggggaggaggaaadddddddddddddaass';
$str_arr = str_split($str);//字符串拆解为数组
$map_arr = array_flip($str_arr);//数组键值反转(反转后会自动去重)
$over_arr = [];//结果数组
foreach ($str_arr as $k => $v) {
    if ($k == 0 || $v != $str_arr[$k - 1]) {
        $map_arr[$v] = $v;
        continue;
    }
    $map_arr[$v] .= $v;
    if (!isset($over_arr[$v]) || strlen($over_arr[$v])         $over_arr[$v] = $map_arr[$v];
    }
}
$result = [];
$max_len = 0;
foreach ($over_arr as $key => $value) {
    $str_len = strlen($value);
    if ($max_len         $max_len = $str_len;
        $result = [
             $key => $str_len
        ];
    }
    if ($max_len == $str_len) {
        $result[$key] = $str_len;
        continue;
    }
    if ($max_len > $str_len) {
        continue;
    }
}
var_dump($over_arr,$result);

打印的结果如下:

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?