找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。
方法一
<?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);
打印的结果如下: