找出字符串中,连续重复次数最多的字符

今天在群聊中,有个群友给一道这样的面试题,记录一下,需要找出连续重复最多的,而不是重复最多的。

在这里插入图片描述

<?php
 function get_repstr ($str){
    
    
     $str_arr = str_split($str); //把字符串分割到数组
     $map_arr = array_flip(array_unique($str_arr)); //去重,并把键-值交换
     $over_arr = []; //结果容器
     for ($i=0; $i<strlen($str); $i++){
    
     //按照个数循环
         //下标为0的,或者当前与前一个不重复的,直接写入,跳过。
         if ($i === 0 || ($str_arr[$i] !== $str_arr[$i-1]) ){
    
    
             $map_arr[$str_arr[$i]] = $str_arr[$i];
             continue;
         }
         //排除特殊条件,记录重复字符串
         $str_in = $map_arr[$str_arr[$i]] .= $str_arr[$i];
         // 对比该字符的长度,如果旧记录比新记录短,就更新,否则还是旧记录最大,忽略新记录。
         strlen($over_arr[$str_arr[$i]]) < strlen($str_in)? $over_arr[$str_arr[$i]] = $str_in :null;
     }
     return  $over_arr;
 }
 $str = 'bychrisQxnnddemdereeeeeffetcssssssfggdddreggggaggaggaaadddddddddddddaass';
 $a  = get_repstr($str);
 print_r($a);
 //Array
 //(
 //    [n] => nn
 //    [d] => ddddddddddddd
 //    [e] => eeeee
 //    [f] => ff
 //    [s] => ssssss
 //    [g] => gggg
 //    [a] => aaa
 //)

完整实例:http://github.crmeb.net/u/defu

猜你喜欢

转载自blog.csdn.net/qq_39221436/article/details/116156306#comments_22691945