Как найти длину самой длинной последовательной последовательности выбранного символа в строке?
То, что я пытаюсь сделать, это посмотреть, если 0 встречается пять или более раз в такой строке
«111010110101010000010010100000000000111»
Мне нужна функция, которая будет принимать строку и символ и в приведенном выше примере вернуть 11 для символа 0
Заранее большое спасибо, гуру 🙂
Я думаю, что должен быть более эффективный способ достичь этого, может быть, с помощью регулярного выражения, но, тем не менее, вот что я пришел с
function howmanytimes($str,$char){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){
if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount) $maxcount=$thiscount;
}else $thiscount=0;
}
return $maxcount;
}
Надеюсь, это поможет!
Изменить: Если вы хотите, чтобы он только проверял, появляется ли символ более X раз подряд, есть более эффективный способ добиться этого. Эта функция вернет true, если выбранный символ появляется более X раз, и false, если нет.
function Xtimes($str,$char,$howmanytimes){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount){
if($thiscount==$howmanytimes+1){return true;}
$maxcount=$thiscount;
}
}else $thiscount=0;
}
return false;
}
Здесь вы идете с regex
:
function highCount($string, $select) {
preg_match_all("/($select+)\1*/", $string, $find);
foreach($find[0] as $single) {
$length[] = strlen($single);
}
return max($length);
}
//11
echo highCount("111010110101010000010010100000000000111", 0);
Вы можете попробовать это:
function myFunc($input_string,$find)
{
$string=preg_replace("^$find","-",$input_tring);
$array=explode("-",$string);
$array=array_diff($array, array(""));
asort($array);
return strlen($array[0]);
}
Я предположил, что -
персонаж не появляется в ваших критериях поиска.